我正在为一组RESTful Web应用程序的用户开发内部身份验证系统.我们的目的是用户应该能够通过Web表单登录一次,并且可以访问我们域中的所有这些RESTful应用程序,这些应用程序可以跨多个服务器分布在私有云中.(我已经理解,单个经过身份验证的会话与纯RESTful方法不一致,但这是一个可用性要求.)
应用程序本身将使用各种编程语言编写,因此需要采用与语言无关的方法.有人向我建议我们可以使用OpenID或OAuth或类似的框架来处理身份验证,但我的理解是这些服务用于第三方服务,而不是用于在内部系统上共享数据的第一方服务.在这种情况下,我们可能有一个中央提供商服务,所有其他应用程序被视为第三方(或依赖方).
问题:
OpenID/OAuth是否适合在第一方服务中进行身份验证?
如果是这样,如何建议为此用例设置身份验证?
用户是否必须向他们想要使用的每个第一方服务器授予个人权限,就像他们需要向任何第三方服务器授予个人权限一样?我认为这违反了访问所有第一方服务的单点登录的要求.
是否有支持此第一方用例的网站的良好示例?
这个第一方用例的替代框架是什么?
divyanshm.. 14
您不需要OAuth用于SSO服务.
如您所知,OAuth的主要用途/优势是授予对第三方应用程序的访问权限,以便以受控方式访问/使用您的资源.
您没有拥有OAuth所需的身份验证/授权服务器,为什么不在所有API中使用单个登录服务.OAuth访问令牌与您需要的完全不同.
据我了解,你可以拥有的东西就像OAuth一样,你的服务器可以将代币销售给应用程序.(我假设它是一个完全内部系统,所以令牌不能被误用).
基本上我提出的是:
当应用程序尝试访问第一个API时,它会重定向到Web表单.
用户输入凭据并将其带到DB进行验证.让我们有一个为用户/应用程序生成令牌的服务
下一个API访问请求将使用该令牌进行 - 令牌唯一地标识应用程序
根据您需要的安全级别,您可以使用HMAC签署一些文本并将其作为令牌发送,或者如果它完全内部只为应用程序/用户生成唯一标识符并将其发送到其他API
收到令牌后,每个服务首先使用令牌调用主服务器,并在内部获取相应的客户/用户ID并执行所需的功能.
简而言之,将登录+令牌生成+令牌验证分成不同的模块.所有API都应使用此模块进行登录/令牌验证.
我在这里提出的工作方式与OAuth类似,但由于您希望在私有云中使用它,因此所有安全方面都已被删除.
您不需要OAuth用于SSO服务.
如您所知,OAuth的主要用途/优势是授予对第三方应用程序的访问权限,以便以受控方式访问/使用您的资源.
您没有拥有OAuth所需的身份验证/授权服务器,为什么不在所有API中使用单个登录服务.OAuth访问令牌与您需要的完全不同.
据我了解,你可以拥有的东西就像OAuth一样,你的服务器可以将代币销售给应用程序.(我假设它是一个完全内部系统,所以令牌不能被误用).
基本上我提出的是:
当应用程序尝试访问第一个API时,它会重定向到Web表单.
用户输入凭据并将其带到DB进行验证.让我们有一个为用户/应用程序生成令牌的服务
下一个API访问请求将使用该令牌进行 - 令牌唯一地标识应用程序
根据您需要的安全级别,您可以使用HMAC签署一些文本并将其作为令牌发送,或者如果它完全内部只为应用程序/用户生成唯一标识符并将其发送到其他API
收到令牌后,每个服务首先使用令牌调用主服务器,并在内部获取相应的客户/用户ID并执行所需的功能.
简而言之,将登录+令牌生成+令牌验证分成不同的模块.所有API都应使用此模块进行登录/令牌验证.
我在这里提出的工作方式与OAuth类似,但由于您希望在私有云中使用它,因此所有安全方面都已被删除.
Oauth支持多种不同的流。您可以使用Oauth 2.0中的客户端凭据流来避免要求用户为每个应用程序授予权限(这适用于您同时控制服务器和应用程序或想要对某些应用程序进行预授权的情况)。这篇文章很好地解释了所有内容:http : //tatiyants.com/using-oauth-to-protect-internal-rest-api/