Sql server WSO2 API管理器身份验证违反唯一密钥约束错误
Sql server WSO2 API管理器身份验证违反唯一密钥约束错误,sql-server,wso2,wso2-am,Sql Server,Wso2,Wso2 Am,我们已经在一个分布式体系结构中实现了WSO2 API管理器(v1.10.0),如在线文档中所述
这包括以下内容(在5个单独的服务器上):
网关(x2)
发布服务器和存储(在单个服务器上)
钥匙经理(x2)
这些数据库连接到SQL Server 2014实例上的3个普通API Manager数据库(注册表、用户管理器和API管理器)
我们使用密钥管理器对网站用户进行身份验证(登录、忘记密码等),并对API调用进行身份验证
但是,在尝试登录站点时,我在密钥管理器上看到以下错误(违反唯一密钥约束)
我们已经在一个分布式体系结构中实现了WSO2 API管理器(v1.10.0),如在线文档中所述
这包括以下内容(在5个单独的服务器上):
- 网关(x2)
- 发布服务器和存储(在单个服务器上)
- 钥匙经理(x2)
这些数据库连接到SQL Server 2014实例上的3个普通API Manager数据库(注册表、用户管理器和API管理器)
我们使用密钥管理器对网站用户进行身份验证(登录、忘记密码等),并对API调用进行身份验证
但是,在尝试登录站点时,我在密钥管理器上看到以下错误(违反唯一密钥约束):
TID:[-1][[2016-10-06 00:36:47842]错误
{org.wso2.carbon.identity.oauth2.dao.TokenPersistenceTask}-错误
在持久化访问令牌时发生
:c5a0a11e63388dCHANGEDea34b0533445
{org.wso2.carbon.identity.oauth2.dao.TokenPersistenceTask}
org.wso2.carbon.identity.oauth2.IdentityOAuth2Exception:发生错误时
存储使用者密钥的访问令牌:
fpA6AhOfbVCHANGEDgH0WzBDOga位于
org.wso2.carbon.identity.oauth2.dao.TokenMgtDAO.storeAccessToken(TokenMgtDAO.java:246)
在
org.wso2.carbon.identity.oauth2.dao.TokenMgtDAO.persistAccessToken(TokenMgtDAO.java:284)
在
org.wso2.carbon.identity.oauth2.dao.TokenPersistenceTask.run(TokenPersistenceTask.java:52)
在
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
在
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
在java.lang.Thread.run(Thread.java:745)处,由以下原因引起:
com.microsoft.sqlserver.jdbc.SQLServerException:违反唯一性规则
密钥约束“CON_APP_KEY”。无法在对象中插入重复的键
“dbo.IDN\u OAUTH2\u访问\u令牌”。重复的键值为(15,
威廉姆斯。j2@CHANGED.org.uk, -1234,
应用程序(用户,369db21a386ae4CHANGED0ff34d35708d,激活,无)。在
com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
在
com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515)
在
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:404)
在
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350)
在
com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
在
com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
在
com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180)
在
com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155)
在
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.execute(SQLServerPreparedStatement.java:332)
在
org.wso2.carbon.identity.oauth2.dao.TokenMgtDAO.storeAccessToken(TokenMgtDAO.java:224)
... 还有5个
这导致网站上出现以下.NET错误:
我试过用谷歌搜索这个,但找不到最新的答案
我没有将密钥管理器配置为具有主节点和工作节点(如所述),因为文档似乎表明不需要这样做
任何帮助都将不胜感激 在一些调试发现问题后,您能否更改中的以下配置(0
)!在我们设置这个配置之前
<JDBCPersistenceManager>
<SessionDataPersist>
<PoolSize>0</PoolSize>
</SessionDataPersist>
</JDBCPersistenceManager>
然后,旧的故障令牌将被删除,服务器将开始正常工作 我使用mysql,也面临同样的问题。更改池大小也不是一个完整的解决方案。然后我注意到idn_oauth2_access_令牌表有些奇怪。有一列time_已创建,但内容不是创建的时间。这是最后一次更新时间戳。我在某个地方读到了time_created(创建时间)列中几个列上的系统顺序。我检查了我的sql脚本,发现数据库在启动更新时更新了此列。我删除了这个规则,我没有更多的错误 嗨,巴西亚。谢谢你的回答。我确实看到了你链接到的页面。但是,我认为这是因为我正在使用的版本(v1.10.0-而不是v1.9.0)没有/repository/conf/identity.xml
文件,并且它所拥有的/repository/conf/indentity/identity.xml
文件中没有PoolSize
元素。但是,它确实有一个true…
元素(当前已注释掉)。我应该取消注释吗?如果是这样,它的值应该是true
还是false
?我刚刚取消了
元素的注释,尝试设置true
,然后设置false
。然而,在这两种情况下,我仍然有同样的问题。我将首先尝试运行清理(通过将其值设置为1),然后使用true
再次尝试。是的,请尝试启用它并设置0
。我已经实现了此功能,但仍然看到相同的问题。我正试图准确地确定新行是何时第一次添加到API Manager数据库中的IDN\u OAUTH2\u ACCESS\u TOKEN
表中的,以及在什么条件下。在我们的设置中,我在这个版本中也遇到了同样的错误!嗨,安徒生。谢谢你的回答。何时运行update
SQL命令?这只是一次性的任务吗?如果是,如何防止此问题再次发生?此问题的原因是初始运行时未添加0。当它为0时,这不会发生。不幸的是,我仍然看到CON_APP_KEY
唯一键问题-即使在设置0
之后。这仅在我离开一段时间后刷新应用程序网页时发生。我的identity.xml中有以下内容:0 true false
<JDBCPersistenceManager>
<SessionDataPersist>
<PoolSize>0</PoolSize>
</SessionDataPersist>
</JDBCPersistenceManager>
update IDN_OAUTH2_ACCESS_TOKEN set TOKEN_STATE="INACTIVE" where TOKEN_STATE="ACTIVE"