[英]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.