本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
權杖發行者端點
/oauth2/token
發行 JSON Web 權杖的 OAuth 2.0 權杖端點 (JWTs)。 https://www.rfc-editor.org/rfc/rfc6749#section-3.2
您的使用者集區 OAuth 2.0 授權伺服器會將 JSON Web 權杖 (JWTs) 從權杖端點發行至下列類型的工作階段:
-
已完成授權碼授予請求的使用者。成功兌換程式碼會傳回 ID、存取和重新整理權杖。
-
Machine-to-machine 已完成用戶端憑證授予的 (M2M) 工作階段。使用用戶端秘密成功授權傳回存取權杖。
-
先前已登入並收到重新整理權杖的使用者。重新整理權杖身分驗證會傳回新的 ID 和存取權杖。
注意
在託管 UI 中或透過聯合身分使用授權碼授予登入的使用者,一律可以從權杖端點重新整理其權杖。使用 API操作登入
InitiateAuth
的使用者,當使用者集區中記住的裝置未處於作用中狀態時,AdminInitiateAuth
可以使用權杖端點重新整理其權杖。如果記住的裝置處於作用中狀態,請使用InitiateAuth
或AuthFlow
AdminInitiateAuth
API請求REFRESH_TOKEN_AUTH
中的 重新整理權杖。
當您將網域新增至使用者集區時,權杖端點會變為可公開使用。它接受HTTPPOST請求。為了應用程式安全,請使用 PKCE搭配授權碼登入事件。PKCE 驗證傳遞授權碼的使用者是否與驗證的使用者相同。如需 的詳細資訊PKCE,請參閱 IETF RFC 7636
您可以在 IDs 進一步了解使用者集區應用程式用戶端及其授予類型、用戶端秘密、授權範圍和用戶端使用應用程式用戶端的應用程式特定設定。您可以在 進一步了解 M2M 授權、用戶端憑證授予,以及具有存取權杖範圍的授權Scopes、M2M 和 APIs搭配資源伺服器。
若要從使用者的存取權杖擷取有關使用者的資訊,請將其傳遞至您的 userInfo 端點或 。 GetUser API 請求。
POST /oauth2/token
/oauth2/token
端點僅支援 HTTPS POST
。您的應用程式會直接對此端點提出請求,而不經由使用者的瀏覽器。
權杖端點支援 client_secret_basic
和 client_secret_post
身分驗證。如需 OpenID Connect 規格的詳細資訊,請參閱用戶端身分驗證
標頭中的請求參數
Authorization
-
如果用戶端獲得秘密,用戶端可以在授權標頭
client_secret
中傳遞其client_id
和 作為client_secret_basic
HTTP授權。您也可以在請求的內文中加入client_id
和client_secret
做為client_secret_post
授權。授權標頭字串是基本
Base64Encode(client_id:client_secret)
。下列範例是djc98u3jiedmi283eu928
具有用戶端秘密 的應用程式用戶端的授權標頭abcdef01234567890
,使用字串 Base64-encoded版本djc98u3jiedmi283eu928:abcdef01234567890
:Authorization: Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
Content-Type
-
將此參數的值設為
'application/x-www-form-urlencoded'
。
內文中的請求參數
grant_type
-
(必要) 您要請求的OIDC授予類型。
必須是
authorization_code
、refresh_token
或client_credentials
。在以下條件下,您可以從權杖端點請求自訂範圍的存取權杖:-
您在應用程式用戶端組態中啟用請求的範圍。
-
您可以使用用戶端秘密設定應用程式用戶端。
-
您可以在應用程式用戶端中啟用用戶端憑證授予。
-
client_id
-
(選用) 使用者集區中應用程式用戶端的 ID。指定驗證您使用者的相同應用程式用戶端。
如果用戶端是公有的,且沒有秘密或
client_secret_post
授權client_secret
中有 ,則必須提供此參數。 client_secret
-
(選用) 驗證使用者的應用程式用戶端的用戶端秘密。如果您的應用程式用戶端具有用戶端秘密,且您沒有傳送
Authorization
標頭,則需要此項。 scope
-
(選用) 可以是與應用程式用戶端相關聯的任何自訂範圍的組合。您請求的任何範圍都必須為應用程式用戶端啟用。如果沒有,Amazon Cognito 會忽略它。如果用戶端未請求任何範圍,身分驗證伺服器會指派您在應用程式用戶端組態中授權的所有自訂範圍。
只有在
grant_type
為client_credentials
時使用。 redirect_uri
-
(選用) 必須和用於在
authorization_code
中取得redirect_uri
的相同/oauth2/authorize
。如果
grant_type
是 ,您必須提供此參數authorization_code
。 refresh_token
-
(選用) 若要為使用者工作階段產生新的存取和 ID 權杖,請將
/oauth2/token
請求中的refresh_token
參數值設定為來自相同應用程式用戶端先前發行的重新整理權杖。 code
-
(選用) 授權碼授予的授權碼。如果您的授權請求包含
grant_type
的 ,您必須提供此參數authorization_code
。 code_verifier
-
(選用) 您用來計算具有 的授權碼授予請求
code_challenge
中的 的任意值PKCE。
具有正面回應的請求範例
將授權碼交換成權杖
範例 – POST請求
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token& Content-Type='application/x-www-form-urlencoded'& Authorization=Basic
ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
grant_type=authorization_code& client_id=1example23456789
& code=AUTHORIZATION_CODE
& redirect_uri=com.myclientapp://myclient/redirect
範例 – 回應
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token": "eyJra1example",
"id_token": "eyJra2example",
"refresh_token": "eyJj3example",
"token_type": "Bearer",
"expires_in": 3600
}
注意
只有當 refresh_token
是 grant_type
時,權杖端點才會傳回 authorization_code
。
將用戶端憑證交換為存取權杖:授權標頭中的用戶端機密
範例 – POST請求
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token > Content-Type='application/x-www-form-urlencoded'& Authorization=Basic
ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
grant_type=client_credentials& client_id=1example23456789
& scope=resourceServerIdentifier1
/scope1
resourceServerIdentifier2
/scope2
範例 – 回應
HTTP/1.1 200 OK Content-Type: application/json { "access_token": "eyJra1example", "token_type": "Bearer", "expires_in": 3600 }
將用戶端憑證交換為存取權杖:請求主體中的用戶端機密
範例 – POST請求
POST /oauth2/token HTTP/1.1 Content-Type: application/x-www-form-urlencoded X-Amz-Target: AWSCognitoIdentityProviderService.Client credentials request User-Agent: USER_AGENT Accept: / Accept-Encoding: gzip, deflate, br Content-Length: 177 Referer: http://auth.example.com/oauth2/token Host: auth.example.com Connection: keep-alive grant_type=client_credentials&client_id=
1example23456789
&scope=my_resource_server_identifier
%2Fmy_custom_scope
&client_secret=9example87654321
範例 – 回應
HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Date: Tue, 05 Dec 2023 16:11:11 GMT x-amz-cognito-request-id: 829f4fe2-a1ee-476e-b834-5cd85c03373b { "access_token": "eyJra12345EXAMPLE", "expires_in": 3600, "token_type": "Bearer" }
將授權碼授予與PKCE權杖交換
範例 – POST請求
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token Content-Type='application/x-www-form-urlencoded'& Authorization=Basic
ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
grant_type=authorization_code& client_id=1example23456789
& code=AUTHORIZATION_CODE
& code_verifier=CODE_VERIFIER
& redirect_uri=com.myclientapp://myclient/redirect
範例 – 回應
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token": "eyJra1example",
"id_token": "eyJra2example",
"refresh_token": "eyJj3example",
"token_type": "Bearer",
"expires_in": 3600
}
注意
只有當 refresh_token
是 grant_type
時,權杖端點才會傳回 authorization_code
。
將重新整理權杖交換成權杖
範例 – POST請求
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token > Content-Type='application/x-www-form-urlencoded'& Authorization=Basic
ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
grant_type=refresh_token& client_id=1example23456789
& refresh_token=eyJj3example
範例 – 回應
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token": "eyJra1example",
"id_token": "eyJra2example",
"token_type": "Bearer",
"expires_in": 3600
}
注意
只有當 refresh_token
是 grant_type
時,權杖端點才會傳回 authorization_code
。
負向回應的範例
範例 – 錯誤回應
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
{
"error":"invalid_request|invalid_client|invalid_grant|unauthorized_client|unsupported_grant_type"
}
invalid_request
-
請求遺漏必要參數、包含不支援的參數值 (非
unsupported_grant_type
),或是格式不正確。例如,grant_type
是refresh_token
,但沒有包含refresh_token
。 invalid_client
-
用戶端身分驗證失敗。例如,用戶端在授權標頭中包含
client_id
和client_secret
,但並沒有使用該client_id
和client_secret
的用戶端存在。 invalid_grant
-
重新整理權杖已撤銷。
授權碼已被使用或不存在。
應用程式用戶端不具有對所請求範圍中所有屬性的讀取存取權。例如,您的應用程式請求
email
範圍,且您的應用程式用戶端可以讀取email
屬性,但不能讀取email_verified
。 unauthorized_client
-
用戶端無權進行授權碼授予流程或重新整理權杖。
unsupported_grant_type
-
如果
grant_type
不是authorization_code
、refresh_token
或client_credentials
,就會傳回此值。