【问题标题】:JWT Validation: Caching JWKS derived from cached discovery document via Azure API ManagementJWT 验证:通过 Azure API 管理缓存从缓存的发现文档派生的 JWKS
【发布时间】:2019-07-22 12:21:25
【问题描述】:

我为下面的发现端点设置缓存,方法是包装它并通过 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

以下是令牌验证的政策:

 <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

【问题讨论】:

  • 根据我的经验,我相信 Azure APIM 正在缓存 OpenID 配置,因此不会在每个请求上都获取它,但是我找不到任何关于它的信息,例如它的缓存时间。像往常一样,文档很糟糕。

标签: azure azure-api-management


【解决方案1】:

您需要将 JWKS 端点的内容缓存在您尝试验证请求 JWT 的服务中的某处。缓存这些密钥的一个好方法是使用一个缓存库,该库将在服务级别缓存密钥一段指定的时间。我在服务中使用的库被 Ben Mames 称为 caffeine,可以在 here 找到。下面是一个快速示例,说明如何将 JWK 缓存 30 分钟:

cache = Caffeine.newBuilder()
        .maximumSize(5)
        .expireAfterWrite(30, TimeUnit.MINUTES)
        .build(k -> jwksMap.get(k));

然后,您的服务可以每 30 分钟从端点重新获取密钥以刷新缓存。

【讨论】:

  • 可以和APIM中的validate-jwt一起使用吗?我看不到它在 APIM 中与 validate-jwt 一起使用的示例,如 OP 中所示。
【解决方案2】:

我不知道您缓存此文档的原因,但元数据端点 (https://openid-connect-eu.onelogin.com/oidc/.well-known/openid-configuration) 和 APIM 从 validate-jwt 策略中获取密钥集端点 (https://openid-connect-eu.onelogin.com/oidc/certs)。

【讨论】:

  • 我不确定你想要实现什么,真的。您能否详细说明您的问题以及您要做什么?
【解决方案3】:

返回的 html 正文上的 url 被修改并替换为通过 APIM 缓存的新 url。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 2021-06-30
    • 2021-09-05
    • 2022-01-14
    相关资源
    最近更新 更多