作者:mobiledu2502920033 | 来源:互联网 | 2022-12-19 09:46
在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 }
但是,当您使用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"' }
文档说这是预期的,https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html.但是,如果您使用AWS_IAM
连接到Cognito(需要具有未经身份验证的访问权限),您应该如何获得用户的用户名,电子邮件,子邮件等?使用AWS_IAM
Auth类型时,我需要访问用户的声明.
1> Mikael Lindl..:
为了使用户的用户名,电子邮件,子目录等可通过AppSync API访问,有一个答案:https : //stackoverflow.com/a/42405528/1207523
总结起来,您想将用户池ID令牌发送到您的API(例如AppSync或API Gateway)。您的API请求已通过IAM身份验证。然后,您可以在Lambda函数中验证ID令牌,现在将经过验证的IAM用户和用户池数据存储在一起。
您要使用IAM identity.cognitoIdentityId
作为用户表的主键。将ID令牌中包含的数据(用户名,电子邮件等)添加为属性。
这样,您可以通过您的API提供用户的声明。现在,例如,您可以将其设置$ctx.identity.cognitoIdentityId
为项目的所有者。然后,也许其他用户可以通过GraphQL解析器看到所有者的名称。
如果您需要在解析器中访问用户的声明,那么恐怕目前似乎无法实现。我对此提出了一个问题,因为这对授权非常有帮助:使用IAM身份验证的AppSync中的组授权
在这种情况下,可以使用Lambda作为数据源,而不是使用解析器,并从上述User表中检索用户的声明。
目前有点困难:)