角色更改后的WSO2 Identity Server缓存

时间:2016-09-15 16:02:02

标签: caching wso2 wso2is wso2carbon wso2-am

我想与您分享我尝试修复我所遇到的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>

这是唯一有效的技巧!所以现在我有一个没有缓存的系统,但至少它按预期工作。

任何建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

确保您已禁用EnableKeyMgtValidationInfoCache,以便在每次通话时生成JWT令牌,如this document中所述。