2017-04-06 115 views
1

我使用Okta的API將Okta與我自己的IdP服務器相集成。Okta:無法通過API調用獲取授權代碼

我按照以下步驟執行授權碼流:

  1. 在我自己的服務器上,使用/api/v1/authn端點得到sessionToken。

  2. 使用sessionToken通過調用這個端點獲得授權:/oauth2/v1/authorize?client_id=" + clientId + "&sessionToken=" + sessionToken + "&response_type=code&response_mode=query&scope=openid&redirect_uri=" + redirectUrl + "&state=evanyang&nonce="

它應該返回的狀態代碼:302並用含有重定向URL的Location頭還有code值的響應。

但是,我不斷收到狀態代碼爲200且沒有Location標題的回覆,其中html正文稱「您正在使用不支持的瀏覽器」。和「JavaScript在瀏覽器上被禁用」。

根據API文檔:http://developer.okta.com/docs/api/resources/oidc.html#authentication-request,該sessionToken參數足以做到這一點:An Okta one-time sessionToken. This allows an API-based user login flow (rather than Okta login UI).

我失去了通過API獲取授權碼任何額外的要求嗎?請幫忙。

感謝提前:)

回答

0

授權碼交付式,並在那裏授權端點的意思是通過瀏覽器,而不是一個非瀏覽器客戶端訪問。

0

此問題是由獲取會話令牌和授權碼之間的會話ID導致的。一旦使用會話令牌獲取會話ID,它就會變爲無效,這意味着它不能再用於獲取授權代碼。

根據Okta,授權碼授權類型和授權端點,並且也可以通過基於API的Web應用程序使用,只要會話令牌在請求中提供:http://developer.okta.com/docs/api/resources/oidc.html#authentication-request。實際上,可以使用此腳本(https://github.com/SohaibAjmal/Okta-OpenId-Scripts)來完成流程。