使用憑證資訊,產生指定IDaaS EIAM執行個體下某個應用的access token。
介面說明
目前支援的方式:授權碼模式、裝置流、重新整理 token、用戶端模式、賬密模式。
1. 授權碼模式(Authorization Code)
適用情境:標準 OAuth 2.0 授權碼流程,適用於有前端互動的 Web 應用程式。 調用樣本:
POST /v2/{instanceId}/{applicationId}/oauth2/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code={授權碼}
&redirect_uri={回調地址}
&client_id={用戶端識別碼}
&client_secret={用戶端密鑰}
參數說明:
● code:通過授權端點擷取的授權碼。
● redirect_uri:必須與擷取 code 時使用的 redirect_uri 一致
1.1 公用用戶端下的授權碼模式
適用情境:適用於無法安全儲存密鑰的應用,如 SPA、原生應用。該流程中,無需使用 client_secret,但必須使用 PKCE 機制。調用樣本:
POST /v2/{instanceId}/{applicationId}/oauth2/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code={授權碼}
&redirect_uri={回調地址}
&client_id={用戶端識別碼}
&code_verifier={code_verifier}
參數說明:
● code_verifier:PKCE 機制中的驗證密鑰,用戶端在發起授權請求時產生,並用於派生 code_challenge。在換取 token 時,必須將此值原樣提交,且必須與產生 code_challenge 時使用的值一致。
code_verifier 和 code_challenge 產生的 Java 樣本:
String codeVerifier = Base64.getUrlEncoder().withoutPadding().encodeToString(new SecureRandom().generateSeed(43));
String codeChallenge = Base64.getUrlEncoder().withoutPadding().encodeToString(java.security.MessageDigest.getInstance("SHA-256").digest(codeVerifier.getBytes()));
2. 裝置流(Device Flow)。
適用情境:適用於電視、IoT 等輸入受限裝置。調用樣本:
POST /v2/{instanceId}/{applicationId}/oauth2/token
Content-Type: application/x-www-form-urlencoded
grant_type=urn:ietf:params:oauth:grant-type:device_code
&device_code={裝置碼}
&client_id={用戶端識別碼}
&client_secret={用戶端密鑰}
擷取裝置碼:需先調用/oauth2/device/code擷取 device_code 和 user_code
2.1 公用用戶端下的裝置流
適用情境:無法方便地進行互動式登入,且屬於公用用戶端。調用樣本:
POST /v2/{instanceId}/{applicationId}/oauth2/token
Content-Type: application/x-www-form-urlencoded
grant_type=urn:ietf:params:oauth:grant-type:device_code
&device_code={裝置碼}
&client_id={用戶端識別碼}
3. 重新整理 Token(Refresh Token)。
適用情境:使用 refresh_token 擷取新的 access_token。調用樣本:
POST /v2/{instanceId}/{applicationId}/oauth2/token
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token
&refresh_token={重新整理權杖}
&client_id={用戶端識別碼}
&client_secret={用戶端密鑰}
4. 用戶端模式(Client Credentials)。
適用情境:服務端間認證,無需使用者參與。調用樣本:
POST /v2/{instanceId}/{applicationId}/oauth2/token
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&client_id={用戶端識別碼}
&client_secret={用戶端密鑰}
&scope={許可權範圍}
5. 賬密模式(Password)。
適用情境:傳統使用者名稱密碼認證(需謹慎使用)。調用樣本:
POST /v2/{instanceId}/{applicationId}/oauth2/token
Content-Type: application/x-www-form-urlencoded
grant_type=password
&username={使用者名稱}
&password={密碼}
&client_id={用戶端識別碼}
&scope={許可權範圍}
調試
您可以在OpenAPI Explorer中直接運行該介面,免去您計算簽名的困擾。運行成功後,OpenAPI Explorer可以自動產生SDK程式碼範例。
調試
授權資訊
請求文法
POST /v2/{instanceId}/{applicationId}/oauth2/token HTTP/1.1
請求參數
|
名稱 |
類型 |
必填 |
描述 |
樣本值 |
| instanceId |
string |
是 |
執行個體 ID。 |
idaas_ue2jvisn35ea5lmthk267xxxxx |
| applicationId |
string |
是 |
應用 ID。 |
app_mkv7rgt4d7i4u7zqtzev2mxxxx |
| client_id |
string |
否 |
用戶端識別碼。 |
app_mkv7rgt4d7i4u7zqtzev2mxxxx |
| client_secret |
string |
否 |
用戶端密鑰,賦值情境: 當 grant_type 為 client_credentials",採用 client_secret_post 方式時,需填寫此值。 |
CSEHDcHcrUKHw1CuxkJEHPveWRXBGqVqRsxxxx |
| grant_type |
string |
是 |
授與類型,目前支援的類型如下:
|
client_credentials |
| code |
string |
否 |
授權 code 碼,傳入情境: grant_type=authorization_code 授權碼模式時,必填參數。 |
xxxx |
| username |
string |
否 |
賬戶名,在帳密模式下,必填參數。 |
uesrname_001 |
| password |
string |
否 |
賬戶名,在帳密模式下,必填參數。 |
xxxxxx |
| device_code |
string |
否 |
裝置 code 碼,傳入情境: grant_type=urn:ietf:params:oauth:grant-type:device_code 即裝置流模式時,必填參數。 |
xxxx |
| redirect_uri |
string |
否 |
重新導向 URI,傳入情境: grant_type=authorization_code 授權碼模式時,必須參數,與擷取授權碼請求中的重新導向 URI 必須是一致的。 |
xxx |
| refresh_token |
string |
否 |
重新整理 token,傳入情境: grant_type=refresh_token 即重新整理權杖模式時,必填參數。 |
ATxxx |
| code_verifier |
string |
否 |
授權碼模式下,開啟 PKCE 能力時,對應的驗證 code。 |
xxx |
| exclusive_tag |
string |
否 |
排除的 tag。 |
ATxxx |
| scope |
string |
否 |
scope 範圍,非必須,支援多選,多個取值以空格分隔。 可選取值:
|
xxxx |
返回參數
|
名稱 |
類型 |
描述 |
樣本值 |
|
object |
響應結果。 |
||
| token_type |
string |
token 類型,取值可選範圍: Basic - Basic 類型 Bearer - Bearer 類型 枚舉值:
|
Bearer |
| access_token |
string |
access_token。 |
ATxxx |
| refresh_token |
string |
refresh_token。 |
RTxxx |
| expires_in |
integer |
有效時間長度,單位秒。 |
1200 |
| expires_at |
integer |
失效時間,格式為 Unix 時間戳記,單位為秒。 |
1653288641 |
| id_token |
string |
id_token。 |
xxxxx |
樣本
正常返回樣本
JSON格式
{
"token_type": "Bearer",
"access_token": "ATxxx",
"refresh_token": "RTxxx",
"expires_in": 1200,
"expires_at": 1653288641,
"id_token": "xxxxx"
}
錯誤碼
訪問錯誤中心查看更多錯誤碼。
變更歷史
更多資訊,參考變更詳情。