我希望通过他们的子查找我的Cognito用户池中的用户,据我所知,这只是他们的UUID.我想在Lambda函数中用Java做这个,但是在AWS的文档中找不到如何做到这一点.有什么想法吗?
在AppSync中,当您使用Cognito用户池作为身份验证时,您可以获得自己的身份
identity:
{ sub: 'bcb5cd53-315a-40df-a41b-1db02a4c1bd9',
issuer: 'https://cognito-idp.us-west-2.amazonaws.com/us-west-2_oicu812',
username: 'skillet',
claims:
{ sub: 'bcb5cd53-315a-40df-a41b-1db02a4c1bd9',
aud: '7re1oap5fhm3ngpje9r81vgpoe',
email_verified: true,
event_id: 'bb65ba5d-4689-11e8-bee7-2d0da8da81ab',
token_use: 'id',
auth_time: 1524441800,
iss: 'https://cognito-idp.us-west-2.amazonaws.com/us-west-2_oicu812',
'cognito:username': 'skillet',
exp: 1524459387,
iat: 1524455787,
email: 'myemail@nope.com' },
sourceIp: [ '11.222.33.200' ],
defaultAuthStrategy: 'ALLOW',
groups: null }
Run Code Online (Sandbox Code Playgroud)
但是,当您使用AWS_IAM auth时,您会得到
identity:
{ accountId: '12121212121', //<--- my amazon account ID
cognitoIdentityPoolId: 'us-west-2:39b1f3e4-330e-40f6-b738-266682302b59',
cognitoIdentityId: 'us-west-2:a458498b-b1ac-46c1-9c5e-bf932bad0d95',
sourceIp: [ '33.222.11.200' ],
username: 'AROAJGBZT5A433EVW6O3Q:CognitoIdentityCredentials',
userArn: 'arn:aws:sts::454227793445:assumed-role/MEMORYCARDS-CognitoAuthorizedRole-dev/CognitoIdentityCredentials',
cognitoIdentityAuthType: 'authenticated',
cognitoIdentityAuthProvider: '"cognito-idp.us-west-2.amazonaws.com/us-west-2_HighBob","cognito-idp.us-west-2.amazonaws.com/us-west-2_HighBob:CognitoSignIn:1a072f08-5c61-4c89-807e-417d22702eb7"' }
Run Code Online (Sandbox Code Playgroud)
文档说这是预期的,https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html.但是,如果您使用AWS_IAM连接到Cognito(需要具有未经身份验证的访问权限),您应该如何获得用户的用户名,电子邮件,子邮件等?使用AWS_IAMAuth类型时,我需要访问用户的声明.
我创建了一个使用电子邮件地址 ($context.identity.claims.email) 的解析程序。我在 AWS 控制台“查询”部分测试了我的查询,一切正常,因为 $context.identity.claims 看起来符合预期;
{
sub: 'xxx-xxx-xxx-xxx-xxx',
aud: 'xxxxxxxxx',
email_verified: true,
sub: 'xxx-xxx-xxx-xxx-xxx',
token_use: 'id',
auth_time: 1563643503,
iss: 'https://cognito-idp.ap-southeast-1.amazonaws.com/ap-southeast-1_xxxxx',
'cognito:username': 'xxxx',
exp: 1563647103,
iat: 1563643503,
email: 'xxx@xxx.xxx'
}
Run Code Online (Sandbox Code Playgroud)
一切看起来都不错,所以让我们在我的 React 应用程序中使用它,该应用程序使用 AWS Amplify 代码进行身份验证。它现在不起作用,那是因为索赔部分没有“电子邮件”!看起来像这样;
{
sub: 'xxx-xxx-xxx-xxx-xxx',
event_id: 'xxx-xxx-xxx-xxx-xxx',
token_use: 'access',
scope: 'aws.cognito.signin.user.admin',
auth_time: 1563643209,
iss: 'https://cognito-idp.ap-southeast-1.amazonaws.com/ap-southeast-1_xxxx',
exp: 1563646809,
iat: 1563643209,
jti: 'xxx-xxx-xxx-xxx-xxx',
client_id: 'xxxx',
username: 'xxxx'
}
Run Code Online (Sandbox Code Playgroud)
谁能帮我解释为什么电子邮件显示在 AWS 控制台查询中,但当我从自己的客户端调用它时却没有显示?