![](/img/trans.png)
[英]JWT Validation: Caching JWKS derived from cached discovery document via Azure API Management
[英]Azure API Management policy caching of JWKs for JWT validation
我正在尝试实现由我们的 JWT 提供程序的openid-configuration/jwks
端点提供的公钥缓存。 我想使用缓存值来验证传入请求的签名。 我们希望缓存到位以降低请求 jwks 端点。 所以我们决定创建自定义 APIM 策略来做到这一点。 经过几个小时的挣扎,我发现自己毫无头绪。 因此,我想解决一些有关 APIM xml 策略的问题。
kid
或x5t
? 关于调用AsJwt()
APIM 策略表达式返回Jwt
对象,该对象不包含应包含必填字段的Header
属性
Id
, Claims
与没有成功的接触不到的地方kid
或x5t
( <set-variable name="requestKid" value="@(context.Request.Headers.GetValueOrDefault("Authorization","").Split(' ')[1].AsJwt()?.____)"/>
)<set-variable
上失败。 第二次调用时,似乎(IResponse)context.Variables["jwksResponse"])
为空。 第一次读取后上下文变量是否会被破坏?<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"])" />
"ValidationError" - "Error in element 'validate-jwt' on line 8, column 4: value is not a valid base64url string."
while 它在硬编码时有效。 (我也尝试过使用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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.