使用PKCE流程設定並使用您組織的自訂OAuth 2應用程式
PKCE是安全的授權流程,非常適用於動態重新整理應用程式(例如行動應用程式),但在所有OAuth2使用者端都很有價值。 PKCE不使用靜態使用者端密碼,而是使用動態產生的字串,消除了使用者端密碼洩漏的風險。
PKCE概述
PKCE流程包含下列步驟。 本節中的步驟僅供參考。 若要執行這些程式,請參閱本文的其他章節。
-
使用者端使用
S256
加密轉換code_verifier
以建立code_challenge
。 -
使用者端會將瀏覽器導向至OAuth2登入頁面,連同產生的
code_challenge
。 您必須註冊應用程式(使用者端),讓OAuth2可以接受授權請求。 註冊後,您的應用程式可將瀏覽器重新導向至OAuth2。 -
OAuth2授權伺服器會將驗證提示重新導向給使用者。
-
使用者使用其中一個已設定的登入選項進行驗證,並且可能會看到同意頁面,其中列出OAuth2將授予應用程式的許可權。
-
OAuth2使用
authorization code
重新導向回您的應用程式。 -
您的應用程式會將此程式碼連同
code_verifier
傳送至OAuth2。 -
OAuth2授權伺服器從初始授權要求中使用
code_challenge_method
轉換code_verifier
,並根據code_challenge
檢查結果。 如果兩個字串的值相符,則伺服器已驗證要求來自相同使用者端,並將發出access token
。 -
OAuth2傳回
access token
,並可選擇傳回refresh token
。 -
您的應用程式現在可以使用這些代號來代表使用者呼叫資源伺服器,例如API。
-
資源伺服器會在回應要求之前驗證權杖。
設定您的應用程式
您必須先從Workfront建立應用程式整合,在OAuth2中註冊應用程式,才能實作授權。
如需建立OAuth2應用程式的指示,請參閱建立Workfront整合的OAuth2應用程式中的使用PKCE建立OAuth2單頁網頁應用程式
建立程式碼交換的校訂金鑰
與標準的授權代碼流程類似,您的應用程式會透過將使用者的瀏覽器重新導向至授權伺服器的/authorize
端點來啟動。 不過,在此情況下,您也必須傳遞程式碼挑戰。
您的第一步是產生程式碼驗證器和挑戰。
您必須在使用者端應用程式中新增程式碼,以建立程式碼驗證器和程式碼挑戰。
PKCE產生器程式碼會建立類似下列的輸出:
code language-none |
---|
|
您的應用程式會儲存code_verifier
以供稍後使用,並將code_challenge
與授權要求一起傳送至授權伺服器的/authorize
URL。
要求授權碼
如果您使用預設的自訂授權伺服器,則您的請求URL會類似於以下內容:
code language-none |
---|
|
請注意正在傳遞的引數:
-
client_id
符合您在設定應用程式時在中建立之OAuth2應用程式的使用者端ID。如需指示,請參閱為Workfront整合建立OAuth2應用程式中的「使用PKCE建立OAuth2單頁網頁應用程式」 。
-
response_type
是code
,因為應用程式使用授權碼授權型別。 -
redirect_uri
是使用者代理程式連同code
一起導向到的回撥位置。 這必須符合您在建立OAuth2應用程式時指定的其中一個重新導向URL。 -
code_challenge_method
是用於產生質詢的雜湊方法,使用PKCE的Workfront Oauth2應用程式一律為S256
。 -
code_challenge
是用於PKCE的程式碼挑戰。
交換權杖的程式碼
若要交換存取權杖的授權碼,請將其與code_verifier
一起傳遞至您的授權伺服器的/token
端點。
code language-none |
---|
|
請注意正在傳遞的引數:
-
grant_type
是authorization_code
,因為應用程式使用授權碼授予型別。 -
redirect_uri
必須符合用來取得授權碼的URI。 -
code
是您從/authorize端點收到的授權碼。 -
code_verifier
是您的應用程式在建立程式碼交換的校訂金鑰中產生的PKCE程式碼驗證器。 -
client_id
會識別您的使用者端,而且必須符合OAuth2中預先登入的值。
如果程式碼仍然有效,且程式碼驗證器相符,則您的應用程式會收到存取權杖。
code language-none |
---|
|
驗證存取權杖
當您的應用程式傳遞具有存取權杖的請求時,資源伺服器需要驗證它。
您可以使用類似以下的API呼叫來驗證您的存取權杖:
code language-none |
---|
|
要求重新整理權杖
若要請求重新整理Token,您可以對API進行POST呼叫,如下所示:
code language-none |
---|
|