WSO2-AM 2.1.0 JWT 令牌过期



使用WSO2AM 2.1.0,我们希望使用 JWT 令牌将 API、用户和应用程序信息传递给后端服务进行授权。问题出在 JWT 验证上,因为过期时间戳设置为当前时间戳

阅读其他资源并没有多大帮助:

  • https://wso2.org/jira/browse/APIMANAGER-4575
  • https://wso2.org/jira/browse/APIMANAGER-3493
  • WSO2 API Manager - 如何更改 JWT 的过期时间?

API 管理器的内容.xml

<CacheConfigurations>
<EnableGatewayTokenCache>true</EnableGatewayTokenCache>
<EnableGatewayResourceCache>true</EnableGatewayResourceCache>
<JWTClaimCacheExpiry>900</JWTClaimCacheExpiry>
...
<APIKeyValidator>
...
<JWTExpiryTime>900</JWTExpiryTime>
<SecurityContextTTL>900</SecurityContextTTL>
</APIKeyValidator>

(即使根据资源,JWTExpiryTime在启用KM或GW缓存时也没有影响)

如果禁用令牌缓存(待验证),JWTExpiryTime 似乎有效,但出于性能原因,我们希望缓存访问令牌。

编辑:似乎如果启用了(网关或密钥管理器)令牌缓存,则 JWT 过期时间仅设置为当前时间戳(在没有就后端服务就令牌余地/倾斜时间达成一些协议的情况下,使 JWT 令牌无法使用)。令牌缓存生存期(默认为 15 分钟),因此后端必须允许过期令牌 15 分钟。 还是我错过了什么?

如果禁用令牌缓存(待验证),JWTExpiryTime 似乎有效

你在这里是对的。只有在同时禁用网关和密钥管理器缓存时,才能在 {APIM_HOME}/repository/conf/api-manager 中使用JWTExpiryTime 设置 JWT过期时间戳.xml。

但是,如果您希望令牌缓存保持启用状态,同时防止 JWT 在生成 JWT 时过期,则可以在 api-manager 中设置">TokenCacheExpiry"属性.xml在"缓存配置"部分下,如下所示。

<CacheConfigurations>
...
<TokenCacheExpiry>900</TokenCacheExpiry>
...
</CacheConfigurations>

使用此属性,您可以定义网关或密钥管理器的缓存过期持续时间,默认值为 900(秒)。

有关详细信息,请参阅以下文档。

  1. https://docs.wso2.com/display/AM210/Configuring+Caching
  2. https://docs.wso2.com/display/AM210/Passing+Enduser+Attributes+to+the+Backend+Using+JWT#PassingEnduserAttributestotheBackendUsingJWT-ExpirytimeoftheJWT

最新更新