本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
OpenID Connect
新增 OpenID Connect 供應商
如需有關如何建立 OpenID Connect 供應商的詳細資訊,請參閱《AWS Identity and Access Management 使用者指南》中的建立 OpenID Connect (OIDC) 身分提供者。
將供應商與 Amazon Cognito 相關聯
若要新增 OIDC 身分提供者 (IdP)
-
從 Amazon Cognito 主控台
選擇 身分池。選取身分池。 -
選擇 使用者存取權 索引標籤。
-
選取 新增身分供應商。
-
選擇 OpenID Connect (OIDC)。
-
從您 AWS 帳戶中的 IAM IdP 選擇一個 OIDC 身分提供者。如果要新增新的 SAML 提供者,請選擇 建立新的提供者 以前往 IAM 主控台。
-
若要設定 Amazon Cognito 向已通過此提供者進行身分驗證的使用者發布憑證時的角色,請設定 角色設定。
-
您可以為該 IdP 使用者指派設定 已驗證角色 時的 預設角色,或您可以 選擇具有規則的角色。
-
如果您選擇 使用規則選擇角色,請輸入使用者身分驗證的 宣告 來源、比較宣告的 操作員、導致符合角色選擇的 值,以及當符合 角色指派 時您要指派的 角色。選取 新增另一項 以根據不同的條件建立其他規則。
-
選擇 角色解析。當您的使用者宣告與您的規則不符時,您可以拒絕憑證或向 已驗證角色 發出憑證。
-
-
-
若要變更透過此提供者驗證使用者,Amazon Cognito 發布憑證時指派的主要索引標籤,請設定 存取控制的屬性。
-
若不套用主要索引標籤,請選擇 非作用中。
-
若要根據
sub
和aud
宣告套用主要索引標籤,請選擇 使用預設對應。 -
若要建立您自己的自訂屬性結構描述至主要索引標籤,請選擇 使用自訂對應。然後,輸入您要從每個 宣告 中獲取的 標籤金鑰,顯示於索引標籤當中。
-
-
選取儲存變更。
您可以將多個 OpenID Connect 供應商與單一身分集區相關聯。
使用 OpenID Connect
請參閱供應商的文件,了解如何登入和接收 ID 字符。
在您擁有權杖後,將該權杖新增至登入對映。使用供應商的 URI 作為金鑰。
驗證 OpenID Connect 權杖
第一次與 Amazon Cognito 整合時,您可能會收到 InvalidToken
例外狀況。請務必了解 Amazon Cognito 如何驗證 OpenID Connect (OIDC) 權杖。
注意
本文指出 (https://tools.ietf.org/html/rfc7523
-
iss
參數必須符合登入對應所使用的金鑰 (例如 login.provider.com)。 -
這個簽章必須有效。簽章必須能夠透過 RSA 公開金鑰來驗證。
注意
身分集區會短暫維護 OIDC IdP 簽署金鑰的快取。如果您的提供者變更其簽署金鑰,Amazon Cognito 可能會傳回
NoKeyFound
錯誤,直到此快取重新整理為止。如果您遇到此錯誤,請等待約十分鐘讓身分集區重新整理簽署金鑰。 -
憑證公有金鑰的指紋符合您在建立 OIDC 供應商時在 IAM 中設定的指紋。
-
如果
azp
參數存在,請對照 OIDC 供應商中列出的用戶端 ID 來檢查這個值。 -
如果
azp
參數不存在,請對照 OIDC 供應商中列出的用戶端 ID 來檢查aud
參數。
jwt.io
Android
Map<String, String> logins = new HashMap<String, String>();
logins.put("login.provider.com", token);
credentialsProvider.setLogins(logins);
iOS - Objective-C
credentialsProvider.logins = @{ "login.provider.com": token }
iOS - Swift
若要將 OIDC ID 權杖提供給 Amazon Cognito,請實作 AWSIdentityProviderManager
協定。
當實作 logins
方法時,請傳回包含您所設定 OIDC 供應商名稱的字典。這個字典可做為金鑰,並以來自已驗證使用者的現行 ID 權杖做為數值,如下列程式碼範例所示。
class OIDCProvider: NSObject, AWSIdentityProviderManager {
func logins() -> AWSTask<NSDictionary> {
let completion = AWSTaskCompletionSource<NSString>()
getToken(tokenCompletion: completion)
return completion.task.continueOnSuccessWith { (task) -> AWSTask<NSDictionary>? in
//login.provider.name is the name of the OIDC provider as setup in the Amazon Cognito console
return AWSTask(result:["login.provider.name":task.result!])
} as! AWSTask<NSDictionary>
}
func getToken(tokenCompletion: AWSTaskCompletionSource<NSString>) -> Void {
//get a valid oidc token from your server, or if you have one that hasn't expired cached, return it
//TODO code to get token from your server
//...
//if error getting token, set error appropriately
tokenCompletion.set(error:NSError(domain: "OIDC Login", code: -1 , userInfo: ["Unable to get OIDC token" : "Details about your error"]))
//else
tokenCompletion.set(result:"result from server id token")
}
}
當您將 AWSCognitoCredentialsProvider
執行個體化時,請傳遞在建構函式中將 AWSIdentityProviderManager 實作為 identityProviderManager 值的類別。如需詳細資訊,請前往 AWSCognitoCredentialsProvider
JavaScript
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'IDENTITY_POOL_ID',
Logins: {
'login.provider.com': token
}
});
Unity
credentials.AddLogin("login.provider.com", token);
Xamarin
credentials.AddLogin("login.provider.com", token);