我在客户端站点上使用Facebook登录和AWS Cognito建立了身份验证流程。工作良好。但是现在我需要在dynambodb表中使用其facebook id引用用户。当然,我可以调用通过AWS API网关公开的AWS lambda函数,但是如何验证API调用实际上是否具有有效的facebook id并且此facebook id与AWS Cognito Id匹配。也许我在这里遗漏了一些东西,我希望你们能指出我正确的方向;)谢谢!
答案 0 :(得分:3)
如果您可以通过cognito id而不是facebook id键入ddb表,则可以使用cognito凭据调用api网关。如果您在调用lambda时使用被调用者凭据,则可以通过令牌$context.identity.cognitoIdentityId
访问cognito id。这可以确保此ID的所有者进行了呼叫。您可以进一步检查$context.identity.cognitoAuthenticationProvider
是否为graph.facebook.com
,以确保他们通过Facebook进行操作。不幸的是,facebook ID没有在凭证中传递,所以如果你需要它,你需要一个查找表,将cognito id映射到facebook id。有关可用令牌的更多详细信息,请参阅here。
答案 1 :(得分:1)
我建议您执行以下操作(我也是AWS的新手,如果您有任何建议请告诉我):
/fblogin
端点,您将在其中发布Facebook访问令牌(您将在客户端使用Facebook进行身份验证以获取此令牌)。该端点与Lambda函数相关联,如fb_login
。fb_login
功能中,您将使用Amazon Cognito进行身份验证以获取其凭据。您应该已在Cognito中创建了联合身份用户池,并为此用户池分配了适当的角色。如果您希望仅将API限制为经过身份验证和授权的用户,这会有所帮助。因此,Cognito的结果将包含IdentityId
和Credentials
。您可以根据请求/fblogin
将其退回。AWS_IAM
。这样,API Gateway通过检查请求中的签名自动验证用户。您可以像其他人建议的那样从$context.identity.cognitoIdentityId
获取用户ID。这样,您就可以确保用户已获得授权和身份验证。 注意:确保在HTTPS上实施/fblogin
端点,然后FB Access令牌将是安全的。如果没有,它将作为HTTP上的纯文本显示。
此外,使用Dynamo DB表作为CognitoID - FacebookID
的日志。如果您自己或您认为合适的任何内容,您可以将其纳入Step 2 Lambda函数中。