【问题标题】:Can multiple services use one Relying Party?多个服务可以使用一个依赖方吗?
【发布时间】:2018-09-30 14:23:14
【问题描述】:

我的公司打算使用 OpenID connect 并使用 Google 作为身份提供商,这些天我已经阅读了 OpenID Connect 文档,仍然有一些问题,第一个是我们有多个服务,我们应该为每个服务创建 Relying Party,还是可以为我们的所有服务创建一个信赖方吗?

例如,公司站点:company.com,和3个完全不同的服务:service1.comservice2.comservice3.com,那么我们是否应该提供3个依赖方:auth.service1.comauth.service2.comauth.service3.com , 所以如果用户点击 service1 上指向 auth.service1.comlogin 按钮将用户重定向到 account.google.com

或者我们可以只为所有 3 项服务提供 1 个信赖方 auth.company.com

【问题讨论】:

    标签: authentication oauth google-oauth openid openid-connect


    【解决方案1】:

    首先了解依赖方在 OpenID Connect (OIDC) 上下文中的含义。来自specification

    依赖方 (RP)

    需要最终用户身份验证的 OAuth 2.0 客户端应用程序和 来自 OpenID 提供者的声明。

    RP 是一个 OAuth 2.0 客户端。因此,如果您检查 OAuth 2.0 规范的定义,您会在下面找到 definition(已提取,请参阅链接中的完整描述),

    一个应用程序代表受保护的资源请求 资源所有者及其授权

    正如我所见,答案取决于那些突出显示的点。

    • 是否可以将每个服务单独归类为一个应用程序?他们之间有独立的行为吗?
    • 授权约束如何作用于这些服务。它们有独立的功能吗?它们如何代表最终用户(资源所有者)?

    因此,如果您将每个服务视为一个独立的应用程序并且有自己的授权限制,那么我认为他们应该考虑使用不同的 RP。否则,如果这些服务相互依赖并且内部使用相同的授权约束,则使用单个 RP 来表示它们。

    无论如何,如果不确切知道这些服务的实际作用,就很难正确回答。

    【讨论】:

    • 谢谢,是的,这些服务完全不同。只有同样的事情会使用谷歌作为身份验证。但是由于这些服务都属于一家公司,我们不喜欢为每个服务开发每个 RP,只是想确认我们是否可以为所有这些服务开发一个 RP?
    • @Sato 没有这些服务的知识很难回答。但是,如果您为所有三个服务开发一个 RP,那么您将使用一个令牌访问所有服务。这意味着如果您登录到一项服务 A ,您也可以将登录 A 中的相同访问令牌用于服务 B 和 C。在这方面有安全考虑。但同样,您可以使用范围参数来控制此类。这样一次登录将只允许您使用一项服务。做出选择时必须考虑所有这些。
    【解决方案2】:

    是的。如果逻辑不同,您只需要 RP 中的一些自定义代码来管理来自多个应用程序的请求。这也提供了一个从客户端抽象逻辑并避免代码重复的地方。

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 2013-07-03
      • 2012-10-01
      • 2021-11-15
      • 2014-08-11
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多