使用WSO2AM 2.1.0,我们希望使用JWT令牌将api、用户和应用程序信息传递给后端服务以进行授权。问题在于JWT验证,因为过期时间戳被设置为当前时间戳。
阅读其他资源没有多大帮助:
api-manager.xml的内容
<CacheConfigurations>
<EnableGatewayTokenCache>true</EnableGatewayTokenCache>
<EnableGatewayResourceCache>true</EnableGatewayResourceCache>
<JWTClaimCacheExpiry>900</JWTClaimCacheExpiry>
...
<APIKeyValidator>
...
<JWTExpiryTime>900</JWTExpiryTime>
<SecurityContextTTL>900</SecurityContextTTL>
</APIKeyValidator>(即使根据资源,当启用KM或GW缓存时,JWTExpiryTime也不起作用)
如果令牌缓存被禁用(待验证),则JWTExpiryTime看起来是有效的,但出于性能原因,我们希望缓存访问令牌。
编辑:似乎如果启用了(网关或KeyManager)令牌缓存,JWT过期将简单地设置为当前时间戳(如果没有就令牌馀弦/倾斜时间的后端服务达成某种协议,JWT令牌就无法使用)。令牌被缓存为缓存生存期(默认情况下为15分钟),因此后端必须允许过期令牌持续15分钟。还是我漏掉了什么?
发布于 2018-06-19 12:24:03
如果令牌缓存被禁用(待验证),JWTExpiryTime看起来就生效了。
你说得对。只有当网关和密钥管理器缓存都被禁用时,才能使用{}/APIM_HOME}/conf/api-Manager.xml中的JWTExpiryTime设置JWT过期时间戳。
但是,如果希望使令牌缓存保持启用,同时防止JWT生成时过期,则可以在CacheConfigurations部分下的api-manager.xml中设置CacheConfigurations属性,如下所示。
<CacheConfigurations>
...
<TokenCacheExpiry>900</TokenCacheExpiry>
...
</CacheConfigurations>使用此属性,您可以定义网关或密钥管理器的缓存过期时间持续时间,默认值为900(秒)。
有关更多信息,请参考以下文档。
https://stackoverflow.com/questions/45943671
复制相似问题