簡體   English   中英

在Api Management的validate-jwt中驗證“ scp”

[英]Validating “scp” in Api Management's validate-jwt

我試圖驗證傳入的JWT令牌的作用域為“ labresults.read”和“ user_impersonation”。 我做了以下政策摘要

<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Invalid JWT Token" require-signed-tokens="true">
    <openid-config url="(snip)" />
    <audiences>
        <audience>(snip)</audience>
    </audiences>
    <required-claims>
        <claim name="scp" match="all">
            <value>labresults.read</value>
            <value>user_impersonation</value>
        </claim>
    </required-claims>
</validate-jwt>

我傳入的令牌看起來像

{
  "iss": "(snip)",
  "exp": 1522334650,
  "nbf": 1522331050,
  "aud": "(snip)",
  "sub": "(snip)",
  "email": "(snip)",
  "name": "Scott Chamberlain",
  "scp": "labresults.read user_impersonation",
  "azp": "(snip)",
  "ver": "1.0",
  "iat": 1522331050
}

當我從開發人員門戶網站進行“嘗試”時,查看對錯誤報告的跟蹤

validate-jwt (648 ms){
    "message": "JWT Validation Failed: Claim value mismatch: scp=labresults.read.."
}

我是否被迫使用一項

<claim name="scp">
    <value>labresults.read user_impersonation</value>
</claim>

我確實不願意,因為我不想強迫此api的使用者將這兩個作用域按唯一的順序傳遞給我。

我需要怎么做才能正確驗證范圍?

在Microsoft的MSDN論壇上得到了答案。

我建議您在策略語句中指定“ separator”屬性,以驗證JWT令牌並查看是否有幫助。 有關更多信息,您可以參考以下文檔: https : //docs.microsoft.com/zh-cn/azure/api-management/api-management-access-restriction-policies#ValidateJWT

Swikruti BoseMicrosoft-MSFT(MSFT CSG)

第一次查看文檔時,我完全忽略了分隔符屬性。

暫無
暫無

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

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