我一直在制作网络应用。 (S3上的Angular 2和通过API网关的lambda中的API)。对于身份验证,我使用了cognito和自定义授权程序(我通过自定义授权程序和cognito将我的身份验证配置为与Google和Facebook bith一起使用)。在自定义授权器的情况下,我通过authroization标头传递令牌,我的自定义授权器验证它。
我正在寻找有关我应该向前推进的建议以及它们的优缺点。我能想到的是:
AWS cognito:
赞成
缺点
自定义授权程序
赞成
缺点
所有这一切,我现在倾向于自定义授权者。需要有关该主题的建议。
PS:我知道我发布的问题没有明确的答案,但对于那些试图决定其应用程序身份验证的人来说会有很大的帮助。
答案 0 :(得分:6)
好的,身份验证和安全性确实很难,AWS安全团队已经考虑过很多问题,您可能没有想到并实施这些问题并使您的应用程序不安全。我实现了我的自定义授权程序,以期望一个授权令牌(通过授权头传递),这是一个base64编码的值,它会在会话中的所有请求中重复。事实证明,由于RC4和diffie hellman的弱点,这使得TLS容易受到攻击。如果我们只是使用IAM使用cognito,那么AWS sigv4请求签名可以保护您免受这些弱点的影响。有关详细信息,请观看https://www.youtube.com/watch?v=zmMpgbIhCpw。
使用cognito / IAM的另一个好处是它可以保护您免受CSRF重播攻击。请求签名涉及使用时间戳。 IAM将拒绝超过约5分钟前签署的任何请求。
简而言之,如果可以的话,请避免使用自定义授权器,并将IAM与cognito一起使用。你会感谢你自己。
答案 1 :(得分:2)
这是一个简短的答案,但是,为什么不同时使用它们?
使用实际实施的自定义授权程序来使用Cognito Users Pool和Cognito Federated Identities。
使用Cognito时,您可以选择不使用所有内容。
例如,我设置了一个自定义Authorizer,我的Lambda实际上使用Cognito Users Pool API对用户进行身份验证。我让Cognito Users Pool处理所有密码,令牌等。