【发布时间】:2020-11-14 21:58:24
【问题描述】:
我们的项目包含几个子应用程序,我们正在寻找一种解决方案来实现 SSO 以避免每个子应用程序的身份验证。
假设这是我们项目的结构:
authentication server(call it AS or IdP or something else)
order-system
product-system
data-analysis-system
.......
我们发现有很多类似this的“基于OAuth2实现SSO”的文章。
在那篇文章中,我们更喜欢SAML 策略,因为它简单明了,但是对于原生应用程序有一些限制,然后我们专注于 OAuth2。
这是工作流程:
OAuth2 中的 1 条规则
资源服务器 (SP) – 这是您尝试访问的网络服务器 信息。
客户端——这是用户与资源服务器交互的方式。 这可能是基于浏览器的 Web 应用程序、本地移动应用程序、桌面 应用程序,一个服务器端应用程序。
授权服务器 (Idp) – 这是拥有用户的服务器 身份和凭证。这是用户实际验证的人 并授权。
以OctoDroid为例,规则很明确:
Client: OctoDroid
Idp: GitHub
SP: Github
User: one who use OctoDroid application.
工作流程是 OctoDroid(Client) 要求你(User) 通过 Github(Idp) 登录并授予权限,以从 Github(SP) 获取资源(repos,issues)。
但是在我们的应用程序中,每个子系统究竟可以处理什么? SP 或 Client ?
如果被视为SP,网络浏览器是Client吗?我一直认为Client 应该是一个应用程序。并且子系统对每个请求都通过Idp验证access_token,然后返回相关资源,这样会不会增加Idp的压力?
如果被视为Client,SP 是谁?
2 应用规则
对于同一个用户,他在不同的子系统中可能有不同的规则,例如他可以读/写来自order-system的所有订单,但他不能访问product-system。那么规则配置应该发生在哪里呢?在 Idp 中还是在各个子系统中?
3 会话同步
对于一个典型的单点登录系统,当用户登录(通过Idp)时,所有子系统都应该登录,当用户注销时,所有子系统都应该注销。
但是在上述 OAuth2 工作流程中,不同的SPs 或Clients 似乎是独立的。当您从OctoDroid 注销时,您仍然可以在登录后使用OpenHub。在这种情况下,OAuth2 似乎与 SSO 不同,它们如何协同工作?
4 Idp 连接到另一个 Idp
在我们的应用程序中,除了基本的用户名和密码登录之外,身份验证服务器还应提供来自 google、facebook 和其他 CAS 提供商的登录。这可能吗?
顺便说一句,我不确定我是否说得足够清楚,如果没有,请在 cmets 中问我。
【问题讨论】:
-
服务,它们是自行部署的(即-docker + k8s)还是将Web应用程序部署到服务器(即-weblogic)
-
每个服务都部署在一个单独的端口上
标签: oauth-2.0 single-sign-on openid-connect