本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用應用程式用戶端的應用程式特定設定
使用者集區應用程式用戶端是使用者集區內的組態,它會與透過 Amazon Cognito 進行驗證的一個行動或 Web 應用程式互動。應用程式用戶端可以呼叫已驗證和未驗證API的操作,並讀取或修改部分或全部的使用者屬性。您的應用程式必須在註冊、登入及處理忘記密碼的操作過程中,對應用程式用戶端表明自己的身分。這些API請求必須包含具有應用程式用戶端 ID 的自我識別,以及具有選用用戶端秘密的授權。您必須保護任何應用程式用戶端IDs或秘密,以便只有授權的用戶端應用程式可以呼叫這些未經驗證的操作。此外,如果您將應用程式設定為使用 AWS 憑證簽署已驗證的API請求,則必須保護您的憑證免受使用者檢查。
您可以為使用者集區建立多個應用程式。應用程式用戶端可能會連結至應用程式的程式碼平台,或是使用者集區中的另一個租用戶。例如,您可能為伺服器端應用程式建立一個應用程式,以及建立不同的 Android 應用程式。每個應用程式都有自己的應用程式用戶端 ID。
您可以在應用程式用戶端層級套用下列使用者集區功能的設定:
應用程式用戶端類型
當您在 Amazon Cognito 中建立應用程式用戶端時,您可以根據標準OAuth用戶端類型公有用戶端和機密用戶端 預先填入選項。以 client secret (用户端密碼) 設定 confidential client (機密用户端)。如需用戶端類型的詳細資訊,請參閱 IETF RFC 6749 #2.1
- Public client (公有用户端)
-
公有用户端在瀏覽器或行動裝置上執行。因為它沒有受信任的伺服器端資源,因此沒有用户端密碼。
- Confidential client (機密用户端)
-
機密用戶端具有伺服器端資源,可透過未驗證API操作的用戶端秘密信任。應用程式可在後端伺服器上作為常駐程式或 Shell 指令碼執行。
- Client secret (用戶端密碼)
-
用戶端秘密或用戶端密碼是固定字串,您的應用程式必須用於應用程式用戶端的所有API請求。您的應用程式用户端必須具有用户端密碼才能執行
client_credentials
授予。如需詳細資訊,請參閱 IETF RFC 6749 #2.3.1。 您無法在建立應用程式後變更密碼。如果您要輪換密碼,可以建立具有新密碼的新應用程式。您也可以刪除應用程式,以封鎖從使用該應用程式用戶端 ID 的應用程式進行存取。
您可以在公有應用程式中使用機密用户端和用户端密碼。使用 Amazon CloudFront 代理新增傳輸SECRET_HASH
中的 。如需詳細資訊,請參閱部落格上的使用 Amazon 代理來保護 Amazon Cognito 的公有用戶端 CloudFront
JSON Web 權杖
Amazon Cognito 應用程式用戶端可以發行下列類型的 JSON Web 權杖 (JWTs)。
- 身分 (ID) 權杖
-
您的使用者已透過您的使用者集區進行身分驗證的可驗證陳述式。OpenID Connect (OIDC) 已將 ID 權杖規格
新增至 2.0 OAuth 定義的存取和重新整理權杖標準。ID 權杖包含身分資訊,例如您的應用程式可用於建立使用者設定檔和佈建資源的使用者屬性。如需更多資訊,請參閱了解身分 (ID) 字符。 - 存取權杖
-
使用者存取許可的可驗證陳述式。存取權杖包含範圍
、 OIDC和 2.0 OAuth 的功能。您的應用程式可以呈現後端資源的範圍,並證明您的使用者集區已授權使用者或機器存取來自 的資料API,或自己的使用者資料。具有自訂範圍的存取權杖 (通常來自 M2M 用戶端憑證授予) 會授權對資源伺服器的存取。如需更多資訊,請參閱了解存取權杖。 - 重新整理權杖
-
當使用者的權杖過期時,您的應用程式可以向您的使用者集區提供初始驗證的加密陳述式。重新整理權杖請求會傳回新的未過期存取和 ID 權杖。如需更多資訊,請參閱了解重新整理權杖。
您可以從 Amazon Cognito 主控台
應用程式用戶端條款
下列條款是 Amazon Cognito 主控台中應用程式用戶端的可用屬性。
- 允許的回呼 URLs
-
回呼URL會指出使用者在成功登入後將重新導向的位置。選擇至少一個回呼 URL。回呼URL必須:
-
成為絕對 URI。
-
已向用戶端預先註冊。
-
不包含片段元件。
請參閱 OAuth 2.0 - 重新導向端點
。 Amazon Cognito 必須使用
HTTPS
,而不使用HTTP
,除非是http://localhost
要進行測試。myapp://example
也支援 URLs 等應用程式回呼。 -
- 允許登出 URLs
-
登出會URL指出登出後要重新引導使用者的位置。
- 屬性讀取和寫入許可
-
您的使用者集區可能有許多客戶,每個客戶都有自己的應用程式用戶端和 IdPs。您可以將應用程式用戶端設定為僅對與應用程式相關的使用者屬性具有讀取和寫入存取許可。在 machine-to-machine (M2M) 授權等情況下,您可以授予對任何使用者屬性的存取權。
屬性讀取和寫入權限組態的考量事項
- 身分驗證流程
-
您的應用程式用戶端允許登入的方法。您的應用程式可以支援使用者名稱和密碼的身分驗證、安全遠端密碼 (SRP)、使用 Lambda 觸發程序的自訂身分驗證,以及權杖重新整理。作為最佳安全實務,請使用SRP身分驗證作為主要登入方法。託管的 UI 會自動使用 在 中為使用者註冊SRP。
- 自訂範圍
-
自訂範圍是您在 Resource Servers (資源伺服器) 索引標籤中,為自己的資源伺服器定義的範圍。格式為
resource-server-identifier
/scope
。 請參閱 Scopes、M2M 和 APIs搭配資源伺服器。 - 預設重新導向 URI
-
將身分驗證請求中的
redirect_uri
參數取代為第三方 IdPs。使用 CreateUserPoolClient或 UpdateUserPoolClientAPI請求的DefaultRedirectURI
參數來設定此應用程式用戶端設定。這URL也必須是您應用程式用戶端CallbackURLs
的成員。Amazon Cognito 會在下列URL情況下將已驗證的工作階段重新導向至此: - 身分提供者
-
您可以選擇部分或全部的使用者集區外部身分提供者 (IdPs) 來驗證您的使用者。您的應用程式用戶端也可以只驗證使用者集區中的本機使用者。當您將 IdP 新增至應用程式用戶端時,您可以產生指向 IdP 的授權連結,並將其顯示在託管的 UI 登入頁面上。您可以指派多個 IdPs,但必須至少指派一個 。如需使用外部 的詳細資訊 IdPs,請參閱 透過第三方新增使用者集區登入。
- OpenID Connect 範圍
-
選擇下列一或多個
OAuth
範圍,以指定可以為存取權杖請求的存取權限。-
openid
範圍宣告您要擷取 ID 權杖和使用者唯一 ID。它還請求全部或部分使用者屬性,具體取決於請求中的其他範圍。Amazon Cognito 不會傳回 ID 權杖,除非您請求openid
範圍。該openid
範圍授權結構化 ID 權杖宣告 (例如過期和金鑰 ID),並確定您在 userInfo 端點的回應中收到的使用者屬性。-
當
openid
是您請求的唯一範圍時,Amazon Cognito 會使用目前應用程式用戶端可讀取的所有使用者屬性填入 ID 權杖。僅具有此範圍的存取權杖的userInfo
回應會傳回所有使用者屬性。 -
當您使用其他範圍 (例如
phone
、email
或profile
) 請求openid
時,ID 權杖和userInfo
將傳回使用者的唯一 ID 以及其他範圍定義的屬性。
-
-
phone
範圍可授予對phone_number
和phone_number_verified
宣告的存取權。此範圍只能隨openid
範圍一起請求。 -
email
範圍可授予對email
和email_verified
宣告的存取權。此範圍只能隨openid
範圍一起請求。 -
此
aws.cognito.signin.user.admin
範圍會授予需要存取權杖的 Amazon Cognito 使用者集區API操作的存取權,例如 UpdateUserAttributes和 VerifyUserAttribute。 -
profile
範圍可供存取用戶端可讀取的所有使用者屬性。此範圍只能隨openid
範圍一起請求。
如需範圍的詳細資訊,請參閱標準OIDC範圍清單
。 -
- OAuth 授予類型
-
OAuth 授予是擷取使用者集區權杖的身分驗證方法。Amazon Cognito 支援下列三種類型的授予。若要將這些OAuth授予整合到您的應用程式中,您必須將網域新增至使用者集區。
授予授權碼
授權碼授予會產生一個程式碼,您的應用程式可以使用該程式碼與 權杖端點 交換使用者集區權杖。在您交換授權碼時,您的應用程式會接收 ID、存取和重新整理權杖。此OAuth流程,就像隱含授予一樣,都會發生在使用者的瀏覽器中。授權碼授予是 Amazon Cognito 提供的最安全的授權,因為在您使用者的工作階段中是看不到權杖的。相反,您的應用程式會產生傳回權杖的請求,並可以將其快取在受保護的儲存中。如需詳細資訊,請參閱 IETF6749 #1.3.1 RFC
中的授權碼 注意
作為公有用戶端應用程式中的最佳實務,請僅啟用授權碼授予OAuth流程,並實作 Code Exchange 的驗證金鑰 (PKCE) 來限制權杖交換。使用 時PKCE,只有在用戶端為權杖端點提供與原始身分驗證請求中呈現的相同秘密時,才能交換授權碼。如需 的詳細資訊PKCE,請參閱 IETF RFC 7636
。 隱含授與
隱含授予會將存取權和 ID 權杖 (但不重新整理權杖) 直接從 授權端點 交付給您的使用者瀏覽器工作階段。隱含授予會移除對權杖端點單獨請求的需求,但與 不相容PKCE,也不會傳回重新整理權杖。此授予適用於無法完成授權程式碼授予的測試案例和應用程式體系架構。如需詳細資訊,請參閱 IETF6749 #1.3.2 RFC
中的隱含授予。您可以在應用程式用戶端中啟用授權碼授予以及隱含授予,並視需要使用個別授予。 用戶端憑證授予
用戶端憑證授予適用於 machine-to-machine (M2M) 通訊。授權程式碼和隱含授予會向經過身分驗證的人類使用者發出權杖。用戶端憑證會將非互動式系統的範圍型授權授予 API。您的應用程式可以直接從權杖端點請求用戶端憑證並接收存取權杖。如需詳細資訊,請參閱 IETF6749 #1.3.4 RFC
中的用戶端憑證。您只能在具有用戶端秘密且不支援授權碼或隱含授予的應用程式用戶端中啟用用戶端憑證授予。 注意
由於您沒有以使用者身分調用用戶端憑證流程,此授予只能新增自訂範圍來存取權杖。自訂範圍是您為自己的資源伺服器定義的範圍。預設範圍如
openid
和profile
不適用於非人類使用者。由於 ID 權杖是使用者屬性的驗證,因此它們與 M2M 通訊無關,並且用戶端憑證授予不會發給它們。請參閱 Scopes、M2M 和 APIs搭配資源伺服器。
用戶端憑證會授予 AWS 帳單的額外費用。如需詳細資訊,請參閱 Amazon Cognito 定價
。
建立應用程式用戶端
更新使用者集區應用程式用戶端 (AWS CLI 和 AWS API)
在 上 AWS CLI,輸入下列命令:
aws cognito-idp update-user-pool-client --user-pool-id "
MyUserPoolID
" --client-id "MyAppClientID
" --allowed-o-auth-flows-user-pool-client --allowed-o-auth-flows "code" "implicit" --allowed-o-auth-scopes "openid" --callback-urls "["https://example.com
"]" --supported-identity-providers "["MySAMLIdP", "LoginWithAmazon"]"
如果命令成功, 會 AWS CLI 傳回確認:
{ "UserPoolClient": { "ClientId": "
MyClientID
", "SupportedIdentityProviders": [ "LoginWithAmazon", "MySAMLIdP" ], "CallbackURLs": [ "https://example.com
" ], "AllowedOAuthScopes": [ "openid" ], "ClientName": "Example", "AllowedOAuthFlows": [ "implicit", "code" ], "RefreshTokenValidity": 30, "AuthSessionValidity": 3, "CreationDate": 1524628110.29, "AllowedOAuthFlowsUserPoolClient": true, "UserPoolId": "MyUserPoolID
", "LastModifiedDate": 1530055177.553 } }
如需詳細資訊,請參閱 AWS CLI 命令參考:update-user-pool-client。
AWS API: UpdateUserPoolClient
取得使用者集區應用程式用戶端 (AWS CLI 和 AWS API) 的相關資訊
aws cognito-idp describe-user-pool-client --user-pool-id
MyUserPoolID
--client-idMyClientID
如需詳細資訊,請參閱 AWS CLI 命令參考:describe-user-pool-client。
AWS API: DescribeUserPoolClient
列出使用者集區 (AWS CLI 和 AWS API) 中的所有應用程式用戶端資訊
aws cognito-idp list-user-pool-clients --user-pool-id "
MyUserPoolID
" --max-results 3
如需詳細資訊,請參閱 AWS CLI 命令參考:list-user-pool-clients。
AWS API: ListUserPoolClients
刪除使用者集區應用程式用戶端 (AWS CLI 和 AWS API)
aws cognito-idp delete-user-pool-client --user-pool-id "
MyUserPoolID
" --client-id "MyAppClientID
"
如需詳細資訊,請參閱 AWS CLI 命令參考: delete-user-pool-client
AWS API: DeleteUserPoolClient