自定义授权者与Cognito - 对amazon api网关的身份验证 - Web应用程序

时间:2016-11-17 13:55:37

标签: amazon-web-services authentication amazon-cognito

我一直在制作网络应用。 (S3上的Angular 2和通过API网关的lambda中的API)。对于身份验证,我使用了cognito和自定义授权程序(我通过自定义授权程序和cognito将我的身份验证配置为与Google和Facebook bith一起使用)。在自定义授权器的情况下,我通过authroization标头传递令牌,我的自定义授权器验证它。

我正在寻找有关我应该向前推进的建议以及它们的优缺点。我能想到的是:

AWS cognito:

赞成

  1. AWS SDK会为您处理所有事情,您在身份验证过程中不会犯错误。
  2. 通过IAM对AWS资源进行细粒度访问控制。
  3. 身份验证不需要每个API前面的额外lambda函数。
  4. 缺点

    1. 需要在客户端专门使用AWS SDK。程序员必须将其添加到他们的工具链中,并在开发过程中使用它。增加了额外的复杂性。
    2. 实际上并不需要对资源进行细粒度的访问控制,因为唯一的访问权限是API网关。
    3. 自定义授权程序

      赞成

      1. 您可以按照自己的方式使用身份验证机制。对身份验证和授权的最终控制。
      2. 您可以让UI使用标准令牌(JWT)调用API,并且开发人员的流程保持不变。无需额外考虑AWS SDK。
      3. 缺点

        1. 身份验证需要大量的思考和努力才能构建。
        2. 错过一些关键方面的机会总是存在。
        3. 它就像重新发明轮子一样。为什么亚马逊已经为你做了这件事。
        4. 所有这一切,我现在倾向于自定义授权者。需要有关该主题的建议。

          PS:我知道我发布的问题没有明确的答案,但对于那些试图决定其应用程序身份验证的人来说会有很大的帮助。

2 个答案:

答案 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处理所有密码,令牌等。