我正在为一组RESTful Web应用程序的用户开发内部身份验证系统。我们的目的是用户应该能够通过Web表单登录一次,并且可以访问我们域中的所有这些RESTful应用程序,这些应用程序可以跨多个服务器分布在私有云中。 (我已经理解,单个经过身份验证的会话与纯RESTful方法不一致,但这是一个可用性要求。)
应用程序本身将使用各种编程语言编写,因此需要采用与语言无关的方法。有人向我建议我们可以使用OpenID或OAuth或类似的框架来处理身份验证,但我的理解是这些服务用于第三方服务,而不是用于在内部系统上共享数据的第一方服务。在这种情况下,我们可能会有一个中央提供商服务,所有其他应用程序都被视为第三方(或依赖方)。
问题:
答案 0 :(得分:12)
您不需要OAuth用于SSO服务。
正如您所知,OAuth的主要用途/优势是授予对第三方应用的访问权限,以便以受控方式访问/使用您的资源。
为什么不在所有API中使用单个登录服务,而不是拥有OAuth所需的身份验证/授权服务器。 OAuth访问令牌与您需要的完全不同。
据我所知,你可以拥有的东西就像OAuth一样,你的服务器会向应用程序发送令牌。 (我假设它是一个完全内部系统,所以令牌不能被误用)。
基本上我提议的是:
简而言之,将登录+令牌生成+令牌验证分成不同的模块。所有API都应使用此模块进行登录/令牌验证。
我在这里提出的建议就像OAuth一样,但由于您希望在私有云中使用它,因此所有安全方面都已被删除。
答案 1 :(得分:4)
Oauth支持多种不同的流程。您可以使用Oauth 2.0中的客户端凭据流来避免要求用户为每个应用程序授予权限(这适用于您控制服务器和应用程序或您希望对某些应用程序进行预授权的情况)。这篇文章很好地解释了所有内容:http://tatiyants.com/using-oauth-to-protect-internal-rest-api/