我通过包装并通过 Azure API 管理对其进行缓存来为下面的发现端点设置缓存。
https://openid-connect-eu.onelogin.com/oidc/.well-known/openid-configuration
因此下面的新链接会进行缓存:
https://my.azure-api.net/sso/.well-known/openid-configuration?subscription-key=mykey
以下是 token 验证策略:
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Error: expired token or invalid token" require-expiration-time="true" require-scheme="Bearer" require-signed-tokens="true">
<openid-config url="https://my.azure-api.net/sso/.well-known/openid-configuration?subscription-key=mykey" />
<audiences>
<audience>id</audience>
</audiences>
<issuers>
<issuer>https://openid-connect-eu.onelogin.com/oidc</issuer>
</issuers>
</validate-jwt>
我的问题是,我是否需要缓存上面发现文档中用于验证的下面的 JWKS 链接?如果是这样,我该如何缓存它?
最佳答案
您需要将 JWKS 端点的内容缓存在您尝试验证请求 JWT 的服务中的某个位置。缓存这些 key 的一个好方法是使用缓存库,它将在服务级别缓存 key 指定的时间。我在服务中使用的库被 Ben Mames 称为 caffeine
,可以在 here 找到。 。以下是如何将 JWK 缓存 30 分钟的简单示例:
cache = Caffeine.newBuilder()
.maximumSize(5)
.expireAfterWrite(30, TimeUnit.MINUTES)
.build(k -> jwksMap.get(k));
然后,您的服务可以每 30 分钟从端点重新获取 key 以刷新缓存。
关于azure - JWT验证: Caching JWKS derived from cached discovery document via Azure API Management,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54928172/