我尝试将 Cognito 与自定义 OpenID 提供商结合使用,以访问我的 iOS 应用程序中的 AWS 服务。作为自定义 OpenID 提供商,我使用带有 WP OAuth 服务器插件的 WP 服务器。我从 IAM 控制台成功创建了身份提供商(检查了指纹,它是正确的)。之后,我使用默认角色创建了身份池,并在“身份验证提供程序”-> OpenID 选项卡部分中选择了之前创建的提供程序。现在在 iOS 应用程序中,我尝试使用以下代码获取identityId:
AWSCognitoCredentialsProvider *credentialsProvider =
[[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1
identityPoolId:poolId];
NSString *domain = @"my.dev.somename.com";
NSString *accessToken = <correct and actual oauth access token>;
credentialsProvider.logins = @{domain: accessToken};
AWSServiceConfiguration *configuration =
[[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1
credentialsProvider:credentialsProvider];
[AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration;
[[credentialsProvider getIdentityId] continueWithBlock:^id(AWSTask *task) {
if (task.error) {
NSLog(@"Error: %@", task.error.localizedDescription);
}
else {
NSLog(@"identityID: %@", task.result);
}
return nil;
}];
每次我都会遇到“GetId 失败...登录 token 无效”的情况。错误(NotAuthorizedException)。 同时,访问 token 有效且未过期,因为我可以使用它与服务器进行通信。创建提供者期间使用的受众和代码中使用的 poolId 肯定是正确的。
我不确定这是否有帮助,但需要提及的是,我们的服务器支持使用 Facebook 登录,因此为了测试,我已将 Facebook 作为经过身份验证的提供商添加到身份池中,并且它起作用了:我能够获取 IdentityId就这样。
有人可以帮忙吗?
更新:
斯科特的回答是正确的。这里唯一的问题 - 无法从 WP OAuth 服务器插件请求 OpenID token (至少对于我正在使用的版本 3.1.5 而言)。看来该插件仅支持 3-legged 授权流程,而我们这里有 2-legged。因此,我最终得到了使用“开发人员验证身份 Authflow”(请参阅 docs )和自定义开发人员身份验证提供程序( code example )的自定义 WP 插件。希望这会对某人有所帮助。
最佳答案
确保您使用的授权类型返回有效的 OpenID Connect token (WP OAuth 服务器看起来支持不同的 token /授权类型)。您可以使用jwt.io解码后端颁发的 token 。验证有关 token 的以下信息:
- iss 参数必须与登录映射中使用的 key 匹配(例如 login.provider.com )。
- 签名必须有效。签名必须可通过 RSA 公钥进行验证。
- 托管公钥的证书指纹与您的 OpenId Connect 提供商上配置的指纹相匹配。
- 如果存在 azp 参数,请对照 OpenId Connect 提供商中列出的客户端 ID 检查该值。
- 如果 azp 参数不存在,请对照 OpenId Connect 提供商中列出的客户端 ID 检查 aud 参数。
关于ios - Amazon Cognito,自定义 OpenID 提供商, "Invalid login token"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32203478/