是否使用SSO断言(JWT或SAML)用于OAuth断言流程通用?

时间:2015-05-21 20:43:57

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

我正在研究一组暴露使用OAuth 2进行身份验证的REST API的系统。各种系统都有自己独立的用户帐户集,所有系统中都没有用户标识符的常见概念

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

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

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

但这些都是草案,在投入过多之前,我想了解这些模式是否用于相对广泛的用途,或者我是否支持边缘案例技术。

所以我的问题是:

  • 这些SSO模式是否与OAuth 2相同?
  • 是否有其他常用方法可以解决同样的问题?

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

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

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

Google似乎使用“服务帐户”Details Here

将JWT变体用于服务器到服务器应用程序

2 个答案:

答案 0 :(得分:1)

We广泛使用Salesforce端点进行令牌交换,并完全按照您的要求进行操作。其他系统在概念上类似但略有不同的实现,返回access_token的不同形式(例如SAP,AWS是2个很好的例子)。

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

  1. 用户进行身份验证(对网站)。
  2. 有代表该身份验证的内容(例如SAML令牌)
  3. 您调用特定API来交换API access_token的用户工件。
  4. 其他应用程序使用的另一种方法是为API执行与网站相同的操作:使用可以以标准方式从可信实体生成的工件。 JWT是一个很好的候选人。后者由Azure移动服务,Firebase,Layer.com使用。

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

答案 1 :(得分:1)

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

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