首页 > 解决方案 > SSO 使用 OAuth2 协议和 Identity Server 4

问题描述

基于OpenID的 SSO with WSO2 Identity ServerWSO2 Identity Server:关于 SSO并不能完全打消我的疑虑。

我有两个微服务:

  1. 订单(可通过以下网址获得:mydomain.com/orders)
  2. 仓库(位于:mydomain.com/warehouse)

两者都在同一个域下可用。

两者都有各自的前端和后端。(分别是 Angular 和 .Net 核心)

我想使用 OAuth2 和 Autorization Code + PKCE Flow Grant Type 提供 SSO(单点登录)。

我想使用 Identity Server 作为 OAuth2 和 OIDC 的实现。

设想:

  1. 用户点击 mydomain.com 并自动重定向到他/她登录的 /login。
  2. 用户在订单微服务中进行了身份验证(为订单发出了 JWT),并且用户单击了一个名为“转到仓库”的按钮。预期行为:不应再次要求用户登录。

问题:

  1. 我应该使用授权码 + PKCE 流程吗?
  2. 我是否应该有单独的客户(从 STS/IS 的角度来看),例如 orders_client 和warehouse_client?
  3. STS/IS 如何识别用户已经通过身份验证?使用身份验证cookie?

标签: .net-coreoauth-2.0single-sign-onidentityserver4openid-connect

解决方案


  1. 我应该使用授权码 + PKCE 流程吗?

是的,在最新的 OAuth 2.1 中,您只需在两个流授权代码流和客户端凭据流之间进行选择。不推荐使用所有其他流。因此,当涉及用户时,您应该将身份验证流程与 PKCE 一起使用。

  1. 我是否应该有单独的客户(从 STS/IS 的角度来看),例如 orders_client 和warehouse_client?

这取决于。

如果您有两个客户端,则用户可能需要同意两个不同的客户端。从用户的角度来看,他们只需要登录并同意其中一个应用程序可能会更好。或者,如果您在这两个服务之前放置一个代理,那么用户会将系统视为一个。或者,您可以共享相同的数据保护 API 密钥,以便两个服务可以共享相同的会话 cookie。

  1. STS/IS 如何识别用户已经通过身份验证?使用身份验证cookie?

作为用户,您与 IdentityServer 有一个单独的会话 cookie,因此当您在登录后跳回它(可能受到第二个服务的挑战)时,您将自动登录。您可能需要给予同意,但这可以在您进行初始身份验证时使用提示参数进行控制。


推荐阅读