我正在设计一个分布式系统的架构,基本上是用 Ruby (Rails、Sinatra 等) 开发。它有几个仅限 API 的纯组件,比如 API_C1、API_C2、API_C3。还有一些 Web 客户端应用程序,比如 Portal1、Portal2 和一些原生客户端应用程序,比如 Native1。
要求:
1. 所有 Web 客户端 (Portal1、Portal2) 实现 SSO,集中身份验证。 2. 所有 API 组件都应该以授权的方式暴露自己的 API。 3. 集中化的 API 授权。
我尝试了一些选项的 POC,但仍然没有完整的图片。我尝试使用 rubycas 服务器实现 SSO。它工作的非常好。如果必要,我会考虑使用 java cas 实现。
对于我来说,集中 API 授权是相当棘手的问题。我倾向于采用 OAuth2 的方式,但是有一些问题:
1. 是否可以有一个集中化的 OAuth 提供者来服务所有的 API 组件?那么它应该如何工作,需要使用哪些库/宝石? 2. 如何使我的 Web 应用程序 (Portal1 和 Portal2) 默认受信任。我不想让用户为可信应用程序授权访问。 3. 对于原生客户端应用程序(非 Web 环境),我想支持 2 个 legs 的 OAuth。这是正确的选择吗?同时使用 3 个 legs 和 2 个 legs 可行吗? 4. 用户凭证如何转换为 OAuth 令牌?假设以下用例: - 用户登录 Portal1(通过 CAS 服务器)并打开某个页面 - Portal1 后端服务器应该从 API_C1 和 API_C2 中拉取数据以显示页面。如何在此处授权 API?
我有一些想法,比如将 API 组件放在同一个 SSO CAS 会话下。这种方法可以解决我的第四个问题,不需要进行任何编码。但是使用会话来处理 API 是一个糟糕的做法,那么如何混合会话和 OAuth 授权来处理 API 呢?
请指点我正确的方向。也许有其他选项可以实现像定制 OpenId 或 OAuth 提供者支持 SSO 这样的功能吗?
要求:
1. 所有 Web 客户端 (Portal1、Portal2) 实现 SSO,集中身份验证。 2. 所有 API 组件都应该以授权的方式暴露自己的 API。 3. 集中化的 API 授权。
我尝试了一些选项的 POC,但仍然没有完整的图片。我尝试使用 rubycas 服务器实现 SSO。它工作的非常好。如果必要,我会考虑使用 java cas 实现。
对于我来说,集中 API 授权是相当棘手的问题。我倾向于采用 OAuth2 的方式,但是有一些问题:
1. 是否可以有一个集中化的 OAuth 提供者来服务所有的 API 组件?那么它应该如何工作,需要使用哪些库/宝石? 2. 如何使我的 Web 应用程序 (Portal1 和 Portal2) 默认受信任。我不想让用户为可信应用程序授权访问。 3. 对于原生客户端应用程序(非 Web 环境),我想支持 2 个 legs 的 OAuth。这是正确的选择吗?同时使用 3 个 legs 和 2 个 legs 可行吗? 4. 用户凭证如何转换为 OAuth 令牌?假设以下用例: - 用户登录 Portal1(通过 CAS 服务器)并打开某个页面 - Portal1 后端服务器应该从 API_C1 和 API_C2 中拉取数据以显示页面。如何在此处授权 API?
我有一些想法,比如将 API 组件放在同一个 SSO CAS 会话下。这种方法可以解决我的第四个问题,不需要进行任何编码。但是使用会话来处理 API 是一个糟糕的做法,那么如何混合会话和 OAuth 授权来处理 API 呢?
请指点我正确的方向。也许有其他选项可以实现像定制 OpenId 或 OAuth 提供者支持 SSO 这样的功能吗?