【问题标题】:SSO using OAuth2 protocol with Identity Server 4SSO 使用 OAuth2 协议和 Identity Server 4
【发布时间】:2021-05-18 09:13:21
【问题描述】:

OpenID based SSO with WSO2 Identity ServerWSO2 Identity Server: About 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-core oauth-2.0 single-sign-on identityserver4 openid-connect


    【解决方案1】:
    1. 我应该使用授权码 + PKCE 流程吗?

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

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

    视情况而定。

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 2019-01-11
    • 1970-01-01
    相关资源
    最近更新 更多