所以我试图在我的nodejs API中使用Cognito Identity。我使用Cognity Identity的目的是为用户提供一种安全的方式来创建用户帐户并登录。我希望使用我的API通过识别用户的电子邮件地址来验证用户身份验证。然后,我的API会根据用户的电子邮件向用户提供访问权限。
我能够创建用户,验证用户的电子邮件,然后登录以获取AccessToken,IDToken和RefreshToken。这很棒,但此时我并不完全确定如何处理这些令牌。我想我可以在每次调用我的API时以某种方式使用它们来验证用户,但我不确定如何做到这一点。
我想象认证流程是这样的:
用户使用密码登录 - >我的API调用aws来获取令牌 - >我的API将这些令牌传递回用户的移动设备 - >他们的移动设备存储这些令牌 - > AccessToken用于验证所有API调用,直到它过期 - >如果AccessToken过期,RefreshToken用于获取一组新标记 - >如果RefreshToken过期,用户必须再次使用用户名/密码登录。
这是不正确的还是不正确的做法?如果我有正确的想法,那么我如何使用令牌来实现这一目标?一旦用户获得令牌,我就无法找到有关身份验证过程的任何文档。我能找到的唯一可以实现此目的的是:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#initiateAuth-property
答案 0 :(得分:0)
您的下一步取决于您使用的服务以及使用方式。
例如,对于使用Lambda / API Gateway的API驱动的应用程序,您需要use Amazon Cognito User Pools获取API资源方法,并将ID令牌作为Authorization
标头发送给您的API调用。 (是的,该名称具有误导性。它应该是身份验证,因为授权逻辑实际上是在您的Lambda函数中实现的)
然后,您的Lambda函数可以使用context
对象(当您启用 Lambda代理集成时)从用户池访问身份声明属性:
const email = context.authorizer.claims.email;
或
const cognitoGroups = context.authorizer.claims['cognito:groups'];
如果您尚未启用 Lambda代理集成,则应确保在正文映射模板中传递这些值。
答案 1 :(得分:0)
有一个很好的参考github应用程序,它演示了cognito的各个方面以及如何与lambda,API Gateway,DynamoDB和其他AWS服务集成。
这是一个链接: https://github.com/awslabs/aws-serverless-auth-reference-app