JWT验证:缓存通过Azure API管理从缓存的发现文档派生的JWKS

时间:2019-02-28 14:41:31

标签: 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

以下是令牌验证的政策:

 <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

3 个答案:

答案 0 :(得分:0)

您将需要将JWKS端点的内容缓存在试图验证发出请求的JWT的服务中。缓存这些密钥的一种好方法是使用缓存库,该库将在服务级别缓存密钥达指定的时间。我在服务中使用的库被Ben Mames称为as.Date,可以在here中找到。这是一个简单的示例,说明如何将JWK缓存30分钟:

caffeine

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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