Open ID Connect 提供商(身份池)
OpenID Connect
添加 OpenID Connect 提供商
有关如何创建 OpenID Connect 提供商的信息,请参阅 IAM 文档。
将提供商与 Amazon Cognito 关联
在 IAM 控制台中创建 OpenID Connect 提供商后,您可以将其与身份池关联。配置的所有提供商将显示在 Amazon Cognito 控制台中 Edit Identity Pool (编辑身份池) 屏幕上的 OpenID Connect Providers (OpenID Connect 提供商) 标题下。

您可以将多个 OpenID Connect 提供商与一个身份池关联。
使用 OpenID Connect
请参阅提供商的文档,了解如何登录并接收 ID 令牌。
拥有令牌后,将此令牌添加到登录映射,使用提供商的 URI 作为键。
验证 OpenID Connect 令牌
首次与 Amazon Cognito 集成时,您可能会收到 InvalidToken
异常信息。务必要了解 Amazon Cognito 如何验证 OpenID Connect 令牌。
如此处(https://tools.ietf.org/html/rfc7523
-
iss
参数必须与登录映射中使用的密钥匹配(如 login.provider.com)。 -
签名必须有效。签名必须可通过 RSA 公有密钥进行验证。
-
托管公有密钥的证书的指纹与 OpenId Connect 提供商上的相应配置匹配。
-
如果存在
azp
参数,请针对 OpenId Connect 提供商中列出的客户端 ID 检查此值。 -
如果不存在
azp
参数,请针对 OpenId Connect 提供商中列出的客户端 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
要向 Amazon Cognito 提供 OIDC ID 令牌,请实施 AWSIdentityProviderManager
协议。
在登录方法的实现中,返回包含您配置的 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 参考页面,并选择 initWithRegionType:identityPoolId:identityProviderManager。
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);