对于这个用例,这是 OpenID Connect 的正确使用吗?

Is this the proper use of OpenID Connect for this use case?

我试图了解如何在以下用例中使用 OpenId Connect。假设我们只有以下 3 个组件:

所有流量都将通过 HTTPS。以下是我设想的 OpenID Connect 进程的工作方式:

  1. 本机应用程序会向 SP 请求 "token"。
  2. SP 会看到用户未通过身份验证并要求 来自受信任的 IDP 的验证。
  3. 将用户的凭据提供给 IDP 后,IDP 将 return SP 的 ID 令牌和访问令牌。
  4. SP 将验证 ID 令牌并将访问令牌提供给 本机客户端应用程序用于对 API.
  5. 的所有后续请求

这是在这种情况下使用 OpenID Connect 的推荐方式吗?任何明显的安全问题?我唯一看到的是本机客户端应用程序可以使用访问令牌访问 IDP 的用户信息端点。

关于第 1 - 4 点:

  1. 从 IDP 而非 SP 请求的令牌。 (通常 IDP 托管在单独的子域上)。我喜欢STS术语(Security Token Service)而不是IDP,它很容易描述OIDC服务器的作用:发行令牌的软件。

  2. 我更愿意说:从本机应用程序到 SP 的每个受保护(非匿名)请求都必须由 STS/IDP 验证。将 IDP 视为受保护的 resources/API/SP 和 native-app/RP/client.

  3. 之间的防火墙
  4. IDP 响应取决于所使用的流(代码、隐式、混合、资源所有者、客户端凭据)。这个要点可能有助于快速理解流程:OIDC and OAuth2 Flows

  5. ID 令牌旨在供 client/RP/native 应用程序使用。

我认为所描述的用例很常见,可以由 OpenIDConnect+OAuth2 处理。关于访问用户信息端点,它完全取决于您的 IDP 配置和 RP/Client/NativeApp 配置。

示例: 我将 IdentityServer3 用作 IDP/STS(其官方认证的 OpenID Connect 提供商):在 IdentityServer3 中,我可以通过配置禁用任何端点并限制 RP 范围。

总结一下:我认为这个用例是推荐的,就像你总结的那样。唯一的问题是我在上面强调的一些误解。但最重要的是不要选择错误的流程或通过错误配置滥用标准。

希望有用。