当前位置: 首页 > 知识库问答 >
问题:

在服务之间传递OAuth访问令牌可以吗?

双子民
2023-03-14

在SSO/OAuth/microservices的上下文中考虑以下场景:

  1. 用户使用OAuth的隐式流成功登录到Web应用程序。
  2. Web应用程序从服务A和服务B请求一些数据,并传递用户的访问令牌来授权这两个请求。
  3. 服务A还调用服务B(传递相同的访问令牌!)以构建对初始Web App请求的响应。

现在,是否可以将用户的访问令牌从服务A传递到服务B?

或者服务A应该使用“客户端凭据”授予来获得自己的访问令牌来授权对服务B的调用?

更新:
请假设两个服务都属于同一个组织,并且都信任同一个授权服务器。此外,这两个服务都位于同一个API网关后面,该网关验证访问令牌。

共有3个答案

印子平
2023-03-14

我发现了以下三种选择:

>

  • 如果每个微服务都在验证令牌,那么我们可以传递相同的令牌。但问题是,在这两者之间,相同的令牌可能会过期。

    如果我们使用client_credentials授权,那么我们有两个问题:一个是,我们需要在下一个微服务中发送用户名/id。另一个是,我们需要请求两次——第一次是为了获取访问令牌,第二次是为了实际调用。

    如果我们只在API网关中(而不是在微服务中)进行令牌验证,那么我们需要从API网关在每个微服务中发送用户名。微服务的实现需要改变以接受这个参数/头。

  • 司马辉
    2023-03-14

    我的看法是,如果您有两个不同的服务信任同一个IDP(STS),那么您可以让服务A请求令牌,然后您可以将同一令牌传递给服务B,并让服务B再次验证令牌。传递令牌是可以的,因为您不希望用户再次登录以进行另一个服务调用。

    此外,这取决于服务设置的方式。如果服务A需要来自服务B的一些数据来向用户提供数据,那么我们应该传递相同的用户令牌。我不认为服务应该有他们的访问令牌。

    使用用户令牌确实有助于识别每个服务级别的声明和数据访问。因此,最好在将数据发送给用户之前传递用户令牌并让每个服务验证令牌。

    吕子真
    2023-03-14

    这取决于谁在控制Web应用程序,服务A和服务B。如果它们都由同一方运行,则传递令牌没有问题,因为它位于同一安全域内。

    但是,如果例如服务B由第三方运行,那么事情就会变得有问题,因为服务B的管理员可以获取访问令牌并调用服务A,就好像它是您的Web应用程序一样,可能会访问它不应该访问的资源。

    您还将注意到,如果服务A和服务B归您以外的2个不同方所有,您的Web应用程序还应分别获得两个不同的访问令牌来调用服务A和服务B,以防止相同的安全问题。

    所以答案实际上是:这取决于谁在控制什么,即令牌是否跨越管理/安全域。

     类似资料:
    • 据我所知,OAuth 2.0规范在访问令牌应该采取什么形式方面非常模糊: 令牌可以表示用于检索授权信息的标识符,或者可以以可验证的方式自包含授权信息(即,由一些数据和签名组成的令牌字符串)。为了让客户端使用令牌,可能需要额外的身份验证凭据,这些凭据超出了本规范的范围。 访问令牌提供了一个抽象层,将不同的授权构造(例如用户名和密码)替换为资源服务器可以理解的单个令牌。这种抽象使得发布访问令牌比用于获

    • 我目前正在学习OAuth 2.0和OpenID Connect,我对授权服务器和访问令牌有疑问。规范将授权服务器定义为: 服务器在成功验证资源所有者并获得授权后向客户端发放访问令牌。 因此,据我所知,客户端将用户重定向到授权服务器,用户在授权服务器上进行身份验证,授权服务器向客户端发出访问令牌。 现在有一件事发生了,直到现在我才明白。有两种可能的方法来理解这一点,我正在努力找到正确的方法: > 授

    • 我正在使用MEAN stack构建的SPA中实现fb身份验证。虽然我已经使用facebook token passport策略成功实现了fb身份验证,但我在保护APIendpoint方面遇到了问题。因为为此,我需要在$http服务中同时传递经过身份验证的用户对象和访问令牌,并且我已经尝试将访问令牌作为用户对象的属性和头属性传递,但仍然是401(未经授权的错误)。下面是我的代码片段。 护照留档显示“

    • 本文向大家介绍oauth 刷新访问令牌,包括了oauth 刷新访问令牌的使用技巧和注意事项,需要的朋友参考一下 示例 资源

    • null 很抱歉太啰嗦了。 提前谢了。

    • 有两个< code >Spring启动应用程序。 有用作 dev okta 帐户 (这两个应用程序是标准的< code>Spring Boot客户端- -安全地将消息发送到-- (它按预期工作) 但我试图弄清楚他们之间发生了什么,交通明智 我试图发现检查它从从获取的令牌的那一刻。 这是标准< code>oauth 2.0流程和我想调试部分的序列图(箭头) 之间有一个通信,器: 我似乎无法确认资源服