【问题标题】:IdentityServer4 how to store and renew tokens in authorization code flowIdentityServer4 如何在授权代码流中存储和更新令牌
【发布时间】:2018-10-03 09:56:42
【问题描述】:

我正在寻找使用 IdentityServer4 自动化代码流的最佳方法。

我的应用系统很普通:我有一个 MVC 客户端、一个 WebAPI 和 IS。我还使用 AJAX 从客户端请求 API。所以我需要客户端的访问令牌将其放入授权标头中。

在 cookie 中存储访问令牌是个好主意吗?

我是否需要自包含或引用令牌(我想这与安全有关)?

到期后续订的最佳方法是什么?

我想到了两种策略:

  1. 在收到第一个 401 状态代码时更新访问令牌。可能是问题,因为我向 API 发送了超过 1 个查询,我需要同步它们并调用第一个(以获取结果);
  2. 每次在 API 调用之前,使用 GetTokenAsync 调用 MVC 客户端方法,检查过期时间并获取或更新并获取访问令牌。好像是在作弊,因为每次调用 API 时都需要调用 MVC 客户端。

你能帮我找到最好的方法吗?

【问题讨论】:

  • 这么说 - “我也使用 AJAX 从客户端请求 API”,你的意思是你有一个单独的客户端(一些 angular、react、vue 或任何客户端应用程序),还是你的意思是 MVC 客户端?
  • 我的意思是 MVC 客户端。我使用 MVC 控制器获取不同的视图,然后使用 js http 客户端(如 axios )从 API 获取数据。这就是我使用授权代码流的原因

标签: access-token identityserver4


【解决方案1】:

“在 cookie 中存储访问令牌是个好主意吗?”

不,不是授权代码流。如果您使用的是 MVC Web 应用程序,您应该找到一种方法将令牌存储在远离浏览器的某种数据存储中。所有 MVC 应用程序应该管理的是一个 cookie 来访问未来的 MVC 端点(这将在数据存储中使用适当的访问令牌对 Identity Server 进行后续调用)。

“我需要自包含或引用令牌(我想这与安全有关)吗?”

这完全取决于您以及您认为最适合您的用例的方法。如果您想查看访问令牌中的信息并跳过额外的后端调用以进行验证,请使用参考令牌。策略 2 要求您使用自包含令牌,以便您可以检查到期时间。

“你能帮我找到最好的方法吗?

我不知道我是否可以给出“最好”的方式,但我可能会采用策略 2 并使用自包含令牌。

编辑:如果您想使用“axios,从 API 获取数据”,那么我建议使用没有刷新令牌概念的隐式流。在这种情况下,将其留在 cookie 中应该没问题。

【讨论】:

    猜你喜欢
    • 2017-12-25
    • 2018-08-20
    • 2020-02-14
    • 2021-09-08
    • 2017-06-28
    • 1970-01-01
    • 2020-12-13
    • 2021-02-26
    • 2020-12-11
    相关资源
    最近更新 更多