【问题标题】:How to group user's access_token by session?如何按会话对用户的 access_token 进行分组?
【发布时间】:2020-10-22 01:13:15
【问题描述】:

有oauth2服务器和一些服务。

一些用户在计算机上授权了 2 个服务并获得了 2 个 access_tokens。并且这个用户已经在手机上授权了一些服务并获得了另一个access_token。

用户从所有服务中注销计算机。注销必须使该会话(计算机)中的所有 access_token 无效:令牌 123、789。

如何正确绑定access_token和用户会话? OAuth2 服务器具有 Web 前端,并通过 cookie 中的 JWT 令牌记住用户。是否正常将 access_token 与此 JWT 令牌绑定,并且用户在 oAuth2 服务器中单击注销,而不是获取所有 access_token,与此类 JWT 令牌绑定并使它们无效?

【问题讨论】:

    标签: oauth-2.0


    【解决方案1】:

    一般机制是这样的:

    • 访问令牌是短暂的 ~ 60 分钟
    • 它们发给“客户” - 通常是 UI/应用程序
    • 当您注销客户端时,您会删除其访问令牌
    • 这不会从同一台计算机上的其他客户端删除令牌
    • 但是其他客户端使用的访问令牌很快就会过期,用户需要重新登录

    另请参阅我的 recent answer 以及需要检查每个请求的访问令牌有效性的服务对性能的影响。

    值得思考这里真正的关注点/要求是什么。有时意见是基于旧的/独立解决方案的工作原理,但尝试在 OAuth 架构中实现相同的东西可能会产生很大的成本。

    【讨论】:

    • 是的,由于性能原因,我需要在注销时从服务(客户端)中删除 access_tokens。任何服务都不会在他们系统中的每个请求上检查access_token,因此出现了如何实现该方案的注销的问题。显而易见的解决方案是通过每个服务的特殊注销链接从所有服务中简单地删除访问令牌。我检查了您关于声明缓存的链接,希望它能给您一些答案。
    • 据我了解该链接上的文本,建议缓存检查 access_token 的请求(例如 10 秒或 1 分钟)。这对我的情况不利,因为通过注销所有服务都必须注销。与短语“尝试在 OAuth 架构中实现相同的东西可能会产生很大的成本。”相关。我不想意识到这一点,但我看不到实现这些要求的替代解决方案。
    • 没问题 - 希望我的文章能给你一些想法。让 API 在注销后立即拒绝访问令牌可能非常棘手,同时确保良好的性能和干净的分离。大多数人并不担心这样做,只需在注销时从应用程序中删除令牌。
    猜你喜欢
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多