AWS Cognito Oauth2:刷新令牌轮换

时间:2019-04-09 13:26:22

标签: oauth-2.0 amazon-cognito refresh-token

我们正在将Aws Cognito与Oauth 2.0结合使用,我们想知道cognito是否支持根据Oauth 2.0规范(https://tools.ietf.org/html/rfc6819)的刷新令牌旋转:

基本思想是随每个刷新请求更改刷新令牌值,以检测使用旧的刷新令牌获取访问令牌的尝试

当我们使用Aws .net sdk刷新令牌时:

await user.StartWithRefreshTokenAuthAsync(authRequestRefresh).ConfigureAwait(false);

...我们没有获得新的刷新令牌。获取新的刷新令牌的唯一方法是进行新的登录:

await user.StartWithSrpAuthAsync(authRequest).ConfigureAwait(false);

感谢您的帮助!

亲切的问候, 彼得

2 个答案:

答案 0 :(得分:0)

Cognito不支持刷新令牌轮换。但是,您可以更改刷新令牌对应用程序客户端保持有效的天数。

答案 1 :(得分:0)

为了实现这一点并使用AWS Cognito,您可以使用OAuth 2.0授权授予流程,在其中仅在后端存储Cognito访问和刷新令牌。为了在后端和前端之间保持会话,可以使用提供轮换刷新令牌的其他库/服务。其工作方式如下:

  • 用户使用您的网站/应用以Cognito登录
  • 您会从Cognito获得授权码。将此授权码发送到您的后端。
  • 您的后端使用此授权代码从Cognito获取刷新和访问令牌。
  • 您创建一个单独的会话(使用Cognito的访问令牌和新的单独的刷新令牌-我们将此刷新令牌称为your-rt)。您将Cognito的RT与您的RT相对存储在数据库中。
  • 您将Cognito的访问令牌和your-rt发送到前端。
  • 您的前端在每次API调用时都使用Cognito的访问令牌-与往常一样-您将像往常一样进行验证。
  • 当该访问令牌到期时,您会将您的rt发送到后端,然后从数据库获取AWS的rt。使用AWS的rt,您可以照常调用AWS的刷新令牌端点,以获取新的AWS访问令牌。
  • 然后您将把这个新的AWS访问令牌连同新的your-rt-旋转刷新令牌一起发送回前端!

现在实现旋转刷新令牌非常棘手,因为您必须对刷新令牌API进行前端同步调用+您不能在生成新的your-rt时使旧的your-rt无效-如果新的your-rt无法达到该怎么办客户端? (它们将被注销!)。这是一个blog post对此进行了很好的说明,并且它还提供了一个library来实现旋转刷新令牌! (不是使用cognito,但您可以很容易地对其进行修改。)

完全免责声明:我是这个图书馆的主要撰稿人之一,因为我认为它很棒!请随时通过我们的Discord server与我联系以进行进一步的说明。希望这个答案对您有所帮助!