2017-02-22 415 views
0

我已經在此之後安裝並配置了WSO2 IS 5.3.0中的JWT授予類型guide 然後,我配置了一個啓用OAuth/OpenID Connect入站身份驗證器的服務提供程序。 我可以從一個JavaScript客戶端驗證用戶使用開放標識範圍的Oauth 2協議獲取有效的JWT標記(JWTToken)。WSO2身份服務器JWT承載

最後,我試圖使POST請求到https:// **** /的oauth2 /令牌grant_type =甕:IETF:PARAMS:OAuth的:授予型:JWT承載&斷言= JWTToken使用REST客戶端並設置Content-Type = application/x-www-form-urlencoded。

當我提出請求時,WSOIS服務器要求輸入用戶名和密碼。我能夠通過這一步提供一個有效的clientId和clientSecret。

不幸的是,在這一點上,服務器dos沒有回答訪問令牌,但是有一個400錯誤請求,並且在響應正文中寫入「{」error_description「:」解碼租戶域碳的身份提供者默認公共證書時發生錯誤.super「,」error「:」invalid_grant「}」

我無法理解問題是否是傳遞給服務器的JWT令牌,或者是否存在證書問題。請幫忙嗎?

回答

1

好的。我認爲這應該對你有所幫助。

如果你把ID連接令牌你從WSO2身份服務器得到並把它放在jwt.io你會看到ID連接將有「國際空間站」(發行人)的「https://localhost:9443/oauth2/token」值(與你的主機名是否替換本地主機您已經設置了主機名),它是WSO2 Identity Server的標記端點。

所以,當你使用這個標記爲一JWT承載補助,以驗證簽名授權處理程序嘗試檢索與現場的發行人(ISS)給出的名稱的IDP(即WSO2身份服務器的令牌端點)。由於無法找到任何身份提供者,它將檢索默認身份提供者(注意,這是爲了向後兼容而添加的虛擬IDP),它沒有任何證書。 (你可以在$ IS_HOME發現這種/庫/ conf目錄/標識/身份提供商/ default.xml中)

因此,有兩種方法可以解決這個問題,

  1. 變化的Identity Server的發行價值以便它可以獲取其居民身份提供者的證書。

    要做到這一點, 登錄到管理控制檯,

轉到身份提供商 - >生化 - >入站認證配置 - >的OAuth2/ID連接配置 - >設置 「身份提供商的實體ID」的值作爲LOCAL

  • 創建與OpenID連接令牌(即令牌端點)的名稱等於發行者值的新身份提供商和上傳公證書c應該用來驗證OpenID連接令牌。
  • 就個人而言,我更喜歡第一個解決方案:)

    更新:

    你也需要做一個更多的變化,

    在identity.xml(下庫/ conf目錄/身份發現)取消註釋以下行

    <Audiences> 
        <Audience> 
         ${carbon.protocol}://${carbon.host}:${carbon.manag‌​ement.port}/oauth2/t‌​oken 
        </Audience> 
    </Audiences> 
    

    這將確保受衆驗證檢查將通過當用作JWT承載授權時發佈的OpenID連接令牌。 (即JWT授權處理程序將驗證令牌終端是否爲提供的授權中的受衆之一)

    +0

    我遵循此第一種方式,並且它的工作完美無缺。不幸的是,現在我有以下錯誤「觀衆值沒有與tokenEndpoint別名匹配https://*****.******.cloudapp.azure.com:9443/oauth2/token」您能幫我嗎?提前謝謝了。 – Giovanni

    +0

    我已經解決了在identity.xml配置文件中解除註釋的問題 $ {carbon.protocol}:// $ {carbon.host}:$ {carbon.management.port}/oauth2/token Giovanni

    +0

    太棒了!更新了這一步的答案:D – farasath