.net-core - SSO 使用 OAuth2 协议和 Identity Server 4
问题描述
基于OpenID的 SSO with WSO2 Identity Server和 WSO2 Identity Server:关于 SSO并不能完全打消我的疑虑。
我有两个微服务:
- 订单(可通过以下网址获得:mydomain.com/orders)
- 仓库(位于:mydomain.com/warehouse)
两者都在同一个域下可用。
两者都有各自的前端和后端。(分别是 Angular 和 .Net 核心)
我想使用 OAuth2 和 Autorization Code + PKCE Flow Grant Type 提供 SSO(单点登录)。
我想使用 Identity Server 作为 OAuth2 和 OIDC 的实现。
设想:
- 用户点击 mydomain.com 并自动重定向到他/她登录的 /login。
- 用户在订单微服务中进行了身份验证(为订单发出了 JWT),并且用户单击了一个名为“转到仓库”的按钮。预期行为:不应再次要求用户登录。
问题:
- 我应该使用授权码 + PKCE 流程吗?
- 我是否应该有单独的客户(从 STS/IS 的角度来看),例如 orders_client 和warehouse_client?
- STS/IS 如何识别用户已经通过身份验证?使用身份验证cookie?
解决方案
- 我应该使用授权码 + PKCE 流程吗?
是的,在最新的 OAuth 2.1 中,您只需在两个流授权代码流和客户端凭据流之间进行选择。不推荐使用所有其他流。因此,当涉及用户时,您应该将身份验证流程与 PKCE 一起使用。
- 我是否应该有单独的客户(从 STS/IS 的角度来看),例如 orders_client 和warehouse_client?
这取决于。
如果您有两个客户端,则用户可能需要同意两个不同的客户端。从用户的角度来看,他们只需要登录并同意其中一个应用程序可能会更好。或者,如果您在这两个服务之前放置一个代理,那么用户会将系统视为一个。或者,您可以共享相同的数据保护 API 密钥,以便两个服务可以共享相同的会话 cookie。
- STS/IS 如何识别用户已经通过身份验证?使用身份验证cookie?
作为用户,您与 IdentityServer 有一个单独的会话 cookie,因此当您在登录后跳回它(可能受到第二个服务的挑战)时,您将自动登录。您可能需要给予同意,但这可以在您进行初始身份验证时使用提示参数进行控制。
推荐阅读
- shell - tux 有没有办法让状态栏在所有附加的客户端中显示不同的内容?
- ios - 当以编程方式设置为根视图控制器时,Storyboard 的视图控制器未显示
- excel - 一旦数组中的所有项目都相同就发送电子邮件
- express - 如何修复'SyntaxError: Unexpected token # in JSON at position 0' - POST null body
- scala - 在不同列的火花中读取 csv 文件
- python - 变量取负值,但限制为非负
- arrays - vue js 在数组中找到一个对象,然后将其传播到一个具有额外属性的新数组中
- javascript - 如何将“0:2017-12-31T19:00:00.000Z 1:2018-01-09T19:00:00.000Z”转换为数组?
- javascript - Object.values 是否按照对象中定义的顺序返回“值”
- android - 构建 APK 错误:ExecutionException aapt.v2.Aapt2InternalException