【问题标题】:How to provide OAuth through services?如何通过服务提供 OAuth?
【发布时间】:2019-02-24 03:25:10
【问题描述】:

我有 3 项服务(实际上更多):

  1. 授权服务(使用 OAuth 2.0)
  2. 前端服务
  3. 资源服务

和客户端(网络浏览器)。

我将session_idaccess_tokenrefersh_token 存储在用户网络浏览器的cookie 中。用户转到 Auth 服务,登录并获取这些令牌。在他的网络浏览器被重定向到前端之后。
前端和资源服务无法验证令牌,因为它们对此一无所知,因此必须向 Auth 服务发出请求。
当前场景:
用户(网络浏览器)向前端服务发送请求,前端向身份验证服务发送请求以验证access_token。如果无效,前端会使用 refresh_token 发送刷新令牌的请求。
如果前端需要访问资源服务来处理请求,那么前端将其client_idaccess_token 发送到资源服务。 Resource 服务也向 Auth 服务发送请求以验证 access_token

我的想法对吗?或者它有更简单的架构?
P.S.所有服务都使用 RESTful 架构。

【问题讨论】:

    标签: rest oauth-2.0 microservices


    【解决方案1】:

    OAuth 讨论了如何交换令牌。您提到的似乎是在谈论使用隐式授权,这不太安全,您可能会考虑选择授权流程。

    除此之外,在微服务中,当您有许多服务并且一个用户请求通过许多下游服务时,在每一步都使用身份验证提供者验证令牌可能会成为瓶颈。

    有一些方法可以让您跳过对身份验证服务器的调用,并在不进行显式调用的情况下仍然验证令牌的神圣性。 一种方法是使用 JWT。这些令牌由 Auth 提供者签名,并且您的服务具有可以帮助您验证令牌是否在途中被修改的密钥,并且令牌本身具有确保其有效性所需的所有信息,例如到期时间、目标受众、客户, 角色等。

    登录后,您将获得 AT 和 RT。 AT 可以传递给下游进行身份验证和授权,当 AT 过期时可以使用 RT。 您只需在登录时和需要刷新令牌时与身份验证提供者交谈。

    您可以阅读有关 JWT OAuth2.0 与 JWT 和 OIDC 的更多信息,以获取有关它的更多信息

    【讨论】:

    • 谢谢,我将学习如何使用 JWT 和 OIDC 保护数据。不幸的是,我没有足够清楚地说它是否解决了我的问题。但我喜欢引入具有生命周期的全局令牌的想法。因此,只有在过期时(即每 5 分钟一次),服务才需要从 Auth 服务请求它。
    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 2012-02-06
    • 2018-09-03
    • 2011-04-11
    相关资源
    最近更新 更多