gpt4 book ai didi

用于 JWT 验证的 JWK 的 Azure API 管理策略缓存

转载 作者:行者123 更新时间:2023-12-02 23:37:12 25 4
gpt4 key购买 nike

我正在尝试实现 openid-configuration/jwks 提供的公钥缓存我们的 JWT 提供商的端点。我想使用缓存值来验证传入请求的签名。我们希望有适当的缓存,以降低 jwks 端点的请求。因此,我们决定创建自定义 APIM 策略来实现这一目标。经过几个小时的挣扎,我发现自己毫 headless 绪。因此,我想解决一些有关 APIM xml 策略的问题。

  1. 如何读取请求 JWT kidx5t在政策上?关于APIM policy expressions调用AsJwt()返回Jwt不包含 Header 的对象应包含必填字段的属性
    • 我尝试过Id , Claims没有成功到达 kidx5t (<set-variable name="requestKid" value="@(context.Request.Headers.GetValueOrDefault("Authorization","").Split(' ')[1].AsJwt()?.____)"/>)
  2. 从提供者端点检索 JWK 时,我无法将响应的各个字段存储到单独的上下文变量中,它总是在第二个 <set-variable 失败。 。看起来像(IResponse)context.Variables["jwksResponse"])第二次调用时为null。上下文变量在第一次读取后会被销毁吗?
<send-request mode="new" response-variable-name="jwksResponse" timeout="10" ignore-error="true">
<set-url>https://some.identity.server/.well-known/openid-configuration/jwks</set-url>
<set-method>GET</set-method>
</send-request>
<set-variable name="jwksn" value="@(((IResponse)context.Variables["jwksResponse"]).Body.As<JObject>()["keys"][0]["n"])" />
<set-variable name="jwkse" value="@(((IResponse)context.Variables["jwksResponse"]).Body.As<JObject>()["keys"][0]["e"])" />
  • 如何设置关键指数和模数属性?当我使用上一步中的变量时,我收到 xml 验证错误:"ValidationError" - "Error in element 'validate-jwt' on line 8, column 4: value is not a valid base64url string."而它在硬编码时有效。 (我还尝试使用 Convert.ToBase64String() 进行黑客攻击,但没有成功,对我来说似乎是 xml 验证器问题 - 可以覆盖它吗?)
  • <issuer-signing-keys>
    <key e="@((string)context.Variables["jwkse"])" n="@((string)context.Variables["jwksn"])"/>
    </issuer-signing-keys>
  • 我可以使用 x5c从我们的 JWKs 提供商检索的值作为键值?像这样:
  • <issuer-signing-keys>
    <key>@((string)context.Variables["jwksx5c"])</key>
    </issuer-signing-keys>

    最佳答案

    经过进一步调查我们发现gitHub有关在使用 OpenId 进行 JWT 验证时缓存 JWK 的线程。 JKW 似乎缓存了 1 小时,并且在验证失败时也会重新缓存。但是,文档中并未说明此行为。

    关于用于 JWT 验证的 JWK 的 Azure API 管理策略缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69650030/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com