【问题标题】:Is using a SSO Assertion (JWT or SAML) For OAuth Assertion Flow Common?是否将 SSO 断言(JWT 或 SAML)用于 OAuth 断言流常见?
【发布时间】:2015-08-03 17:25:06
【问题描述】:

我正在开发一组系统,这些系统公开了使用 OAuth 2 进行身份验证的 REST API。这些系统中的许多系统都有自己独立的用户帐户集,所有系统中没有通用的用户标识符概念.

对于交互式使用,我们已经有一个 SAML 单点登录解决方案,因此用户可以在身份提供者上登录一次(它知道他们在所有系统中的用户帐户),然后使用 SAML 自动登录到每个系统。

我想将此模式扩展到我们的 OAuth 2 认证 API。 IE。允许用户使用其身份提供者凭据进行一次身份验证,然后能够针对每个系统触发 OAuth 2 身份验证流程以获取不记名令牌,而无需用户输入每组凭据。

我找到了 2 个草案规范,可以让我实现这一目标:

但这些都是草稿,在进行过多投资之前,我想了解这些模式是否得到了相对广泛的使用,或者我是否支持边缘案例技术。

所以我的问题是:

  • 这些类型的 SSO 模式在 OAuth 2 中是否常见?
  • 是否有解决相同问题的常用替代方法?

这些草稿似乎是由 Salesforce.com 撰写并被他们使用:SAMLJWT

我还在这里看到了一些关于它们用于 Salesforce.com 的问题,这表明它们至少被实际使用过。

我还看到一个未回答的问题,询问 Windows Azure supports this flow 是否表明其他人至少在寻找相同的问题。

Google 似乎使用 JWT 变体来使用“服务帐户”Details HereDetails Here

【问题讨论】:

  • 你研究过 OpenID Connect 吗?
  • @RobbyCornelissen 我看过 Open ID connect,据我了解,它解决了一个微妙不同的问题(尽管我可能读错了)。 Open ID connect 似乎针对共享单个用户身份的系统之间的公共身份验证,就像 Open ID 所做的那样。我正在寻找更多跨安全域的 SSO,其中身份提供者能够在不同的安全域中声明独立的用户身份。

标签: oauth oauth-2.0 single-sign-on saml jwt


【解决方案1】:

让我从对您描述的问题的观察开始。本质上,观察结果是跨多个 OAuth 授权服务器的联合并没有真正作为商品得到解决。换句话说,每组受保护的资源都有自己的 OAS,您需要它来请求令牌。我遇到了这个问题和业务需求。

我假设发布身份断言的 IdP(例如 SAML、WS-Federation)与托管 OAuth 安全 API 的资源服务器不同。我使用的一种技术是返回发布身份的服务器并利用 STS 将身份交换为 SAML Bearer 令牌,并将 SAML Bearer 提供给已集成到资源的 OAuth 授权服务器 (OAS)正在尝试访问,然后为其安全 API 颁发访问令牌。当然,这仅在发出初始断言的 IdP 还提供 STS 以获取 SAML Bearer 令牌时才有效。您在上面记录的 JWT 配置文件是行业内的思想领袖正在努力解决跨多个 OAuth 授权服务器的联合问题的地方。我还没有看到它在整个行业中得到太多整合。

【讨论】:

  • 谢谢,处于我可以忍受的最前沿。我想要避免的是支持一匹更广泛的社区已经远离的马。基于这些响应,听起来 SAML 和 JWT 授权类型是思考所在,并且是那些已解决问题的人所使用的。但尚未广泛使用。
【解决方案2】:

We 广泛使用 Salesforce 端点进行令牌交换,并完全按照您的意愿去做。其他系统在概念上具有相似但略有不同的实现,返回不同形式的access_token(例如 SAP、AWS 是两个很好的例子)。

所有这些都遵循一个模型,在该模型中,它们是用于调用其 API 的安全工件的发布者。换句话说:

  1. 用户进行身份验证(对网站)。
  2. 存在代表该身份验证的东西(例如 SAML 令牌)
  3. 您调用特定 API 以将用户工件交换为 API access_token

其他应用使用的不同方法是对 API 执行与网站相同的操作:使用可以以标准方式从受信任实体生成的工件。 JWT 是一个很好的选择。 Azure 移动服务、Firebase、Layer.com 使用后者。

在我们的实现中,我们默认选择了后一种模型,但在前一种中也实现了对所有系统的抽象,并简化了用户代码。我们称之为“身份委托”端点,它的签名看起来像thisapi_type 参数定义了您交换令牌的系统类型(SAP、Salesforce、Layer 等)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 2018-11-09
  • 1970-01-01
相关资源
最近更新 更多