我想与您分享我尝试修复我所遇到的WSO2问题所遇到的沮丧程度。 我有一个与Api Manager和Identity Server协同工作的系统。 Api Manager负责api,Identity Server负责用户和角色身份验证。在访问api之前,客户端从IS接收令牌并将其作为承载发送给AM。然后在WSO2 AM结束时解析令牌,它作为JWT(具有所有用户数据的对象)到达api。
它很有效,直到您尝试将用户从一个角色切换到另一个角色。在这种情况下,由于wso2缓存,它仍然将旧角色传递给api 15分钟,这导致了问题。
乍一看,解决方案非常简单,对吧?刷新缓存或从配置文件中禁用缓存。然而,在调查"改变角色&#34>之后过程中,我发现更改角色会调用method "removeGatewayKeyCache",它应该从系统中删除缓存。我不知道它删除了什么,但是在程序之后缓存仍然存在。 顺便说一句,即使在所有可能的配置文件中将GatewayKeyCache设置为false,此方法也会清除缓存!
所以我解决问题的方法是在所有配置文件上搜索单词" Cache"识别我需要禁用的缓存。 WSO2 AM& IS有几十个配置文件,其中大部分都有一些" Cache"设置,其中一些重复在不同的文件中。我试图禁用我能找到的所有相关内容,所以我将所有这些设置为false:
EnableGatewayKeyCache
EnableKeyMgtValidationInfoCache
EnableJWTCache
EnableOAuthCache
UserRolesCacheEnabled
AuthorizationCacheEnabled
GetAllRolesOfUserEnabled
但是JWT令牌仍然包含15分钟的旧缓存用户角色!它仍然被调用" removeGatewayKeyCache"并从缓存中删除了一些令牌(我禁用了该死的!)。
我的解决方法是打开carbon.xml配置并将DefaultCacheTimeout参数设置为0.
<DefaultCacheTimeout>0</DefaultCacheTimeout>
这是唯一有效的技巧!所以现在我有一个没有缓存的系统,但至少它按预期工作。
任何建议都将受到高度赞赏。