AWS Cognito-我应在代码的哪里处理oAuth授权代码?

时间:2018-07-12 13:52:31

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

我有一个初学者的问题。我只是从AWS Cognito用户池开始,并成功设置了oAuth“ Authorization Code Grant”工作流-因此,现在,登录后,我被成功重定向并在URL中获取授权代码。下一步是将其替换为实际的JWT令牌,但是问题是我缺少更广阔的视野,并且不知道这种情况下的最佳实践。我知道用JavaScript代码将代码交换为令牌,但是我不知道它应该在哪里运行。

我应在用户池中使用 Triggers 功能,将Lambda函数绑定到某个事件(哪个事件?“ Post Authentication”?),然后让该Lambda函数将代码交换为令牌并将其保存为一个会话?

还是我应将所有这些功能都放入url 中吗?登录成功后,我将重定向到该URL吗?有这种情况的最佳实践吗?

谢谢

2 个答案:

答案 0 :(得分:1)

要提出的问题是:“现在用户已被授权。.现在呢?”

您要为用户提供的AWS服务将确定您需要使用哪种身份验证流。由于您的问题相当广泛。.我将为您提供两种类型的身份验证流程的高级介绍。

联合身份: 您可以配置federated identities来授予用户AWS IAM凭据(AccessKey和AccessSecret)。设置联合身份池时,请指定可以接收IAM凭据的身份(例如:您的认知池,google,任何其他openID提供程序)以及将授予对指定资源的访问权限的IAM策略。此guide将在您的应用程序代码中介绍如何执行此操作。

API网关自定义授权者,您也可以配置Custom Authorizer,其来源为您的Cognito用户池。这将允许您使用从针对用户池进行身份验证时收到的jwt #id_token发出请求。

问题的具体答案:

我是否应该在用户池中使用触发器功能,将Lambda函数与某个事件关联(哪个事件?“ Post Authentication”?),然后让该Lambda函数将令牌代码交换并将其保存为会话?< / em>-通常,触发器用于存储用户数据以进行分析或服务器端处理。如果您使用Cognito进行身份验证,则无需使用Lambda

还是应该在成功登录后将所有这些功能都放入重定向到的URL中?对于这种情况,是否有一些最佳实践?-我建议使用AWS Amplify之类的库通过Cognito管理Authentication

答案 1 :(得分:1)

我推荐的代码授予流程中最常见的方法是您提到的方法,

  

我应将所有这些功能放入url中吗?   成功登录

这样做的好处是,您可以存储刷新令牌服务器端,并在id_token过期之前使用它刷新id_token(在很多地方都声明不存储刷新令牌客户端)。

但是,如果您在AWS AmplifyJS库中查看代码授权的实现,它将在客户端将刷新令牌存储在本地存储中,并使用JavaScript从客户端刷新id_token。

所以在不同项目中同时使用这两种方法时,我觉得后者易于实现和维护。