簡體   English   中英

用於 JWT 驗證的 JWK 的 Azure API 管理策略緩存

[英]Azure API Management policy caching of JWKs for JWT validation

我正在嘗試實現由我們的 JWT 提供程序的openid-configuration/jwks端點提供的公鑰緩存。 我想使用緩存值來驗證傳入請求的簽名。 我們希望緩存到位以降低請求 jwks 端點。 所以我們決定創建自定義 APIM 策略來做到這一點。 經過幾個小時的掙扎,我發現自己毫無頭緒。 因此,我想解決一些有關 APIM xml 策略的問題。

  1. 如何在政策中讀取請求 JWT kidx5t 關於調用AsJwt() APIM 策略表達式返回Jwt對象,該對象不包含應包含必填字段的Header屬性
    • 我tryed IdClaims與沒有成功的接觸不到的地方kidx5t<set-variable name="requestKid" value="@(context.Request.Headers.GetValueOrDefault("Authorization","").Split(' ')[1].AsJwt()?.____)"/> )
  2. 從提供程序端點檢索 JWK 時,我無法將各種響應字段存儲到單獨的上下文變量中,它總是在第二個<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"])" />
  1. 如何設置關鍵指數和模數屬性? 當我使用上一步中的變量時,我收到 xml 驗證錯誤: "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>
  1. 我可以使用x5c從我們JWKs提供商的關鍵值獲取的值? 像這樣:
<issuer-signing-keys>
  <key>@((string)context.Variables["jwksx5c"])</key>
</issuer-signing-keys>

經過進一步調查,我們發現gitHub線程在使用帶有 OpenId 的 JWT 驗證時有關JWK的緩存。 似乎 JKW 被緩存了 1 小時,並且在驗證失敗時也會重新緩存。 但是,文檔中沒有說明這種行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM