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 (OIDC) 令牌。
如此处 (https://tools.ietf.org/html/rfc7523
-
iss
参数必须与登录映射使用的密钥匹配(如 login.provider.com)。 -
签名必须有效。签名必须可通过 RSA 公有密钥进行验证。
-
证书公钥的指纹与您在创建 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
要向 Amazon Cognito 提供 OIDC ID 令牌,请实施 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);