【发布时间】:2019-05-14 08:20:03
【问题描述】:
现在我正在开发一些 iOS 应用程序。此应用程序使用 Amazon Cognito 来制作每个用户的经过身份验证的 ID 和凭证。
另一方面,这个应用程序使用我原来的 WebAPI 服务器。我想使用 Cognito id 和/或凭据检查用户在服务器上的有效性。
我应该使用哪个 AWS API 在服务器上进行此验证(Java 代码)?
【问题讨论】:
标签: amazon-cognito
现在我正在开发一些 iOS 应用程序。此应用程序使用 Amazon Cognito 来制作每个用户的经过身份验证的 ID 和凭证。
另一方面,这个应用程序使用我原来的 WebAPI 服务器。我想使用 Cognito id 和/或凭据检查用户在服务器上的有效性。
我应该使用哪个 AWS API 在服务器上进行此验证(Java 代码)?
【问题讨论】:
标签: amazon-cognito
唯一其他答案中的信息似乎有点不正确,所以我想稍微更新一下。
提到的 API Gateway 方法很棒并且有效,但它仍然在做同样的事情,你可以手动做。使用 API Gateway,它会进行签名检查,但它仍然使用传递的令牌,验证下面讨论的声明,然后将其规范化为上下文对象供您使用。
您可以发送任何令牌,并且可以验证给定令牌是否由 AWS 签名。 此值不能被欺骗。 如果验证成功,那么您可以依赖声明中的所有数据与令牌签署时存在的值相同由亚马逊提供。
另一个答案中的注释正确指示了包含此信息的链接:https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html
使用 Javascript,可以通过以下方式验证令牌:
https://gist.github.com/bradennapier/c996672944ebf511410eb45c0395f525
请注意,这是完成功能发现过程中的第一次,并不代表生产就绪的解决方案。仅供参考。
AWS 也有一些适用于 javascript 和 python 的示例:https://github.com/awslabs/aws-support-tools/tree/master/Cognito/decode-verify-jwt - 我在查看该示例时确实注意到,当给定 access 令牌时它不会正确验证,并且仅适用于 id 令牌。
【讨论】:
将 Amazon Cognito 颁发的 IdentityId 从设备发送到后端并不安全,因为 IdentityId 可能会被欺骗。安全验证 API 请求是否由经过身份验证的用户发出的最佳方法是使用 Amazon API Gateway。您可以使用 Amazon AWS API Gateway 代理您现有的后端(或使用 API Gateway+Lambda 替换后端),API Gateway 可以选择性地使用 AWS Signature Version 4 Signing Process 自动对请求进行身份验证。
【讨论】: