【问题标题】:When to request new access_token for non interactive clients in oauth2 flow?何时为 oauth2 流程中的非交互式客户端请求新的 access_token?
【发布时间】:2018-03-15 04:47:37
【问题描述】:

我有与非交互式客户端相关的问题,例如基于 oauth2 流的后端应用。

https://auth0.com/docs/api-auth/grant/client-credentials

根据 oauth2 对于非交互客户端,流程是:

  • 应用程序使用其客户端 ID 和客户端密码通过 Auth0 进行身份验证。
  • Auth0 验证此信息并返回 access_token。
  • 应用程序可以使用 access_token 代表自己调用 API。

基于此,我的问题是:

  • 后端应用程序应该在本地存储 access_token 还是每次客户端使用应用程序时为同一客户端请求新的 access_token?
  • 如果 access_token 存储在本地,过期时间会怎样?
  • 与交互式用户(登录网络)的 access_token 相比,非交互式客户端的 access_token 应该具有相同的过期时间?

【问题讨论】:

    标签: security oauth-2.0 access-token auth0


    【解决方案1】:

    后端应用程序应将 access_token 存储在本地或请求 每次客户端使用 申请?

    对于客户端凭据授予流程,是否频繁更新或“缓存”返回的 JWT 访问令牌取决于您的要求 - 如果范围(例如)频繁更改,则频繁获取新的访问令牌可能是有意义的确保反映这些变化。从个人经验来看,通常情况并非如此,因此在令牌到期期间缓存令牌是有意义的,并且节省了对 Auth0 的额外调用以在每个请求中获取新令牌。

    如果 access_token 存储在本地,过期时间会发生什么?

    您可以选择在每次发出请求之前检查过期时间,如果过期则获取新的访问令牌,或者只是尝试使用访问令牌而不检查,然后仅在收到失败时尝试更新使用现有令牌时。

    非交互式客户端的 Access_token 应该具有相同的 与交互式用户的 access_token 相比的过期时间 (登录网页)?

    与第一个类似的问题。由于使用客户端凭据授予流程通常表示机密/受信任的客户端(您正在存储客户端机密) - 并且经常用于机器到机器的场景 - 使用更长的到期时间可能是有意义的。然而,正如已经提到的,如果范围可能发生变化等,那么短暂的过期将导致配置更改(范围)被更快地获取。

    【讨论】:

    • 谢谢@arcseldon。 (1)当您说:“如果范围例如经常更改”时,您的意思是业务和安全项目要求或从 json 响应 (oauth.com/oauth2-servers/access-tokens/access-token-response) 创建读写范围? (2) 在稳定的企业环境中,安全项目需求不应该改变,以免影响安全端点的所有应用客户端。那么,假设一个稳定的安全平台,一个具有高过期时间的 access_token 是否有效?或者出于安全目的,access_token 应该在过期时(经常)更新?谢谢
    • 嗨。在这里,我说明您是否拥有相当“固定”的授权权限 - 例如。您分配给 API 的范围类似于read:book write:book,那么更长的到期时间是合适的(所有其他条件都相同 - 例如,受信任的客户端等)。但是,如果您知道授权权限可能会更改,并且您希望非交互式客户端获取新更改,那么较短的到期时间可能更合适 - 例如。您将 delete book 添加为范围,并且您希望现有的非交互式客户端选择该更改 - 因为 exp。很短,他们会提前更新访问令牌。
    猜你喜欢
    • 2015-09-10
    • 2017-11-24
    • 1970-01-01
    • 2019-06-03
    • 2022-01-26
    • 1970-01-01
    • 2012-10-10
    • 2021-12-29
    • 1970-01-01
    相关资源
    最近更新 更多