azure - JWT验证: Caching JWKS derived from cached discovery document via Azure API Management

标签 azure azure-api-management

我通过包装并通过 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 链接?如果是这样,我该如何缓存它?

https://openid-connect-eu.onelogin.com/oidc/certs

最佳答案

您需要将 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/

相关文章:

azure - 验证 Azure APIM 策略中的 JWT

sql-server - 在 Azure 虚拟机规模集 (VMSS) 上实现 SQL Server

azure - 如何修改Azure Devops电子邮件通知模板?

Azure应用程序服务计划停止显示监控信息

Azure 工作负载身份与 Kubernetes 上的 Spark

Azure SQL 数据仓库 DWU 与 Azure SQL DTU

azure - 如何忽略 Azure API Manager validate-jwt 策略中的特定 URL

使用 .pfx 证书时 Azure APIM 出现证书身份验证错误

azure - 在 API 管理策略中,检查 header 值是否在列表/数组内

azure - 在 Azure 管道中运行 Import-AzApiManagementApi