OpenID Connect 第一方和第三方依赖方架构

OpenID Connect 1st and 3rd-party Relying Parties Architecture

我正在为 X1X2 应用程序编写 REST-API Company-X

为了让用户访问和登录 X1 和 X2,他们应该有一个有效的 Company-X 帐户,就像您需要 google 帐户才能使用 gmail 和 google+。简而言之,X1 和 X2 本身没有身份验证,它使用 Company-X 身份提供程序 (IP) 进行身份验证并进行会话。

在 OpenID Connect (OIDC) 术语中,X1 和 X2 将是依赖方 (RP)。 X1是一个User-agent,X2是一个服务器。 Company-X IP 包含授权服务器和资源(受保护REST-API)。

资助类型的选择主要从以下几个方面进行:

  1. 客户端应用程序的类型
  2. 客户端应用程序想要访问哪些资源

第一点要考虑的事情之一是客户端应用程序运行的环境:

  • 基于浏览器 -> 隐式授权
  • 服务器端->授权码授予and/or客户端凭据授予
  • 本机应用程序 -> 主要是隐式授予,但也可以考虑授权码授予

基于此和您的描述,选择 RP X1 的隐式授权似乎是合适的

相对于RP X2就不是那么明确了,我们应该从这个应用程序想要访问哪些资源的角度来审查它。在服务器端,此应用程序能够维护机密并因此有资格获得客户端凭据,但是,当应用程序想要访问与应用程序本身而不是与特定用户关联的资源时,此授权是合适的。

如果此应用程序要访问 与 Company-X 用户帐户关联的资源,则它应使用授权代码 grant

下图说明了客户端凭据授权与所有其他授权之间的重大差异。您会注意到,不涉及单独的资源所有者(理论上资源所有者是客户端应用程序本身)。


客户端凭据

(来源:Client Credentials Grant

授权码授予

(来源:Authorization Code Grant


关于体系结构 从我的角度来看,这似乎是正确的方法。它使用 public 标准并满足您的要求,所以我非常怀疑是否有更好的选择。身份验证系统的大问题不是设计阶段,而是实施本身,特别是考虑到制作它 "work" 需要大约 20% 的努力,剩下的 80% 是确保你没有搞砸。