嗨,有人可以让我知道为自定义(用户名/密码)和Google登录集成AWS Cognito的步骤吗?我能够使自定义登录正常工作。我能够毫无问题地配置用户池。我只是在徘徊客户端更改。
我使用amazon-cognito-identity-js和aws-sdk软件包。
以下是我使用的一些代码段。在这里,我使用了一个参数来确定身份验证器。如果您能提供任何反馈,那就太好了。谢谢。
export function getAwsCredentials(userToken, type) {
let authenticator = '';
if (type == 'CUSTOM') {
authenticator = `cognito-idp.${config.cognito
.REGION}.amazonaws.com/${config.cognito.USER_POOL_ID}`;
}
else if (type == 'GOOGLE') {
authenticator = 'accounts.google.com';
}
AWS.config.update({ region: config.cognito.REGION });
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: config.cognito.IDENTITY_POOL_ID,
Logins: {
[authenticator]: userToken
}
});
return AWS.config.credentials.getPromise();
}
当涉及到联邦身份池时,您实际上可以将所有令牌都一样对待。您只需要[authenticator]
在登录映射中进行更改即可。
大概,调用getAwsCredentials
函数的代码将知道令牌的来源,并且可以传递参数,就像您在上面所做的那样。
我想提一提,我认为这不一定是可怕的方法。我可能会[authenticator]
直接传递值,而不是type
,但这是相对较小的事情。我的主要观点是,它可能会被罚款要离开知道责任感,令牌从与调用代码来了,而不是你调用的函数。
使用令牌确定身份提供者
当然,可能有同样有效的方法可能想要或需要将身份提供者从令牌本身中拉出来。
当你与谷歌直接集成,你从谷歌,一个令牌,该令牌时,传递到Cognito(如在上面的代码)。如果您对令牌进行解码,则会发现
"iss": "accounts.google.com",
在某处
同样,当您直接与用户池集成时,从用户池中获得的令牌(稍后将其提供给身份池)包含以下内容:
"iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx",
这样,您可以通过检查其令牌来判断用户如何登录。
关于Cognito托管UI的说明
如果您使用Cognito的托管UI来登录Google,您将获得Cognito的支持access_token
和id_token
支持(通过重定向)。在这种情况下,所有令牌都来自同一位置(Cognito),这意味着您不能依靠任何调用代码来知道真实身份提供者是谁。
在这种情况下,如果您的应用程序在乎IDP是谁,则必须破解令牌。这部分id_token
是您可能需要的:
"identities": [
{
"userId": "100000000000000000000",
"providerName": "Google",
"providerType": "Google",
"issuer": null,
"primary": "true",
"dateCreated": "1507749926267"
}
],
"token_use": "id",
"auth_time": 1509303233,
"name": "Your User",
"exp": 1509306833,
"iat": 1509303233,
"email": "[email protected]"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句