如何使用OpenID或OAuth进行内部第一方认证?

时间:2013-05-10 15:44:30

标签: authentication oauth-2.0 restful-authentication openid-provider

我正在为一组RESTful Web应用程序的用户开发内部身份验证系统。我们的目的是用户应该能够通过Web表单登录一次,并且可以访问我们域中的所有这些RESTful应用程序,这些应用程序可以跨多个服务器分布在私有云中。 (我已经理解,单个经过身份验证的会话与纯RESTful方法不一致,但这是一个可用性要求。)

应用程序本身将使用各种编程语言编写,因此需要采用与语言无关的方法。有人向我建议我们可以使用OpenID或OAuth或类似的框架来处理身份验证,但我的理解是这些服务用于第三方服务,而不是用于在内部系统上共享数据的第一方服务。在这种情况下,我们可能会有一个中央提供商服务,所有其他应用程序都被视为第三方(或依赖方)。

问题:

  1. OpenID / OAuth是否适合在第一方服务中进行身份验证?
  2. 如果是这样,建议如何为此用例设置身份验证?
  3. 用户是否必须向他们想要使用的每个第一方服务器授予个人权限,就像他们需要向任何第三方服务器授予个人权限一样?我认为这违反了访问所有第一方服务的单点登录的要求。
  4. 是否有支持此第一方用例的网站的良好示例?
  5. 这个第一方用例的替代框架是什么?

2 个答案:

答案 0 :(得分:12)

您不需要OAuth用于SSO服务。

正如您所知,OAuth的主要用途/优势是授予对第三方应用的访问权限,以便以受控方式访问/使用您的资源。

为什么不在所有API中使用单个登录服务,而不是拥有OAuth所需的身份验证/授权服务器。 OAuth访问令牌与您需要的完全不同。

据我所知,你可以拥有的东西就像OAuth一样,你的服务器会向应用程序发送令牌。 (我假设它是一个完全内部系统,所以令牌不能被误用)。

基本上我提议的是:

  1. 当应用尝试访问第一个API时,会将其重定向到网络表单。
  2. 用户输入凭据并被带到数据库进行验证。让我们有一个为用户/应用程序生成令牌的服务
  3. 下一个API访问请求将使用该令牌 - 令牌唯一标识应用
  4. 根据您需要的安全级别,您可以使用HMAC签署一些文本并将其作为令牌发送,或者如果它完全内部只是为应用/用户生成唯一标识符并将其发送到其他API
  5. 收到令牌后,每个服务首先使用令牌呼叫主服务​​器,并在内部提取相应的客户/用户ID并执行所需的功能。
  6. 简而言之,将登录+令牌生成+令牌验证分成不同的模块。所有API都应使用此模块进行登录/令牌验证。

    我在这里提出的建议就像OAuth一样,但由于您希望在私有云中使用它,因此所有安全方面都已被删除。

答案 1 :(得分:4)

Oauth支持多种不同的流程。您可以使用Oauth 2.0中的客户端凭据流来避免要求用户为每个应用程序授予权限(这适用于您控制服务器和应用程序或您希望对某些应用程序进行预授权的情况)。这篇文章很好地解释了所有内容:http://tatiyants.com/using-oauth-to-protect-internal-rest-api/