OAuth2不同的客户端身份验证方法

时间:2013-08-06 09:32:35

标签: authentication oauth-2.0 dotnetopenauth

我有一个充当OAuth 1.0a提供商的网络服务。 Web应用程序通过OAuth 1工作流来访问用户资源。到目前为止一切都很好。

客户端Web应用程序需要与服务进行通信以满足其他需求,以交换未链接到特定用户/资源所有者的私有数据。为此,一个好主意似乎使用OAuth2,特别是Client Credentials Grant(4.4)(专门为此设计)。 从“机密客户端”(根据OAuth规范,Web应用程序属于此类别),您可以直接对客户端进行身份验证并获取访问令牌。

编辑:当然,我所讨论的Web应用程序类型是html + javascript但是身份验证和与提供程序/ Web服务的通信完全是服务器端发生的。凭据(客户端密钥,密钥等)都存储在服务器上(并且永远不会离开)。

根据规范,可以使用“用户名+密码”(带有HTTP基本身份验证方案的客户端密码)或“其他授权方法”进行身份验证。

我无法找到任何这些“其他授权方法”的线索。 由于我们对OAuth1使用私钥/公钥对,我们是否也可以将它们用于此任务? 在这一点上,规格似乎非常自由(而且非常含糊!)。

我想要各种库支持的东西,以便第三方客户端可以使用标准库(例如DotNetOpenAuth)轻松实现它。如果需要,可以合理地假设需要为自定义方法进行一些编码,只要它可以容纳现有的库(插件?)

对于OAuth 2身份验证,是否存在除HTTP Basic之外的任何“标准”或易于使用的内容?

1 个答案:

答案 0 :(得分:2)

如果通过Web应用程序,您指的是在客户端浏览器中运行的JavaScript和HTML应用程序,并且需要向您的服务发出安全请求,那么这不是“机密客户端”。您无法在基于浏览器的应用中存储机密,因为它们对所有人都可见。

如果Web应用程序是指需要发出服务器到服务器请求的服务器端应用程序,那么这是一个“机密客户端”,因为执行代码和机密不可供公众审查。

我将“其他身份验证方法”解释为可以在一个请求中完成的任何http(或https)惯例的身份验证方案。使用TLS的客户端证书身份验证也可能属于此存储桶。我认为OAuth2 4.4客户端凭据授权的主要部分是客户端应用程序通过现有的身份验证方法直接向OAuth令牌服务提供凭据。该示例使用HTTP基本身份验证,但这只是一个示例。

客户端凭据授权与资源所有者凭据授权(4.3)的不同之处主要在于资源所有者授权在http请求的正文中而不是在Authorization标头中显示用户凭据。使用资源所有者授权的其他授权方法将很困难。

使用客户端凭据授权使用其他身份验证方法的最大警告是,OAuth2客户端库对除HTTP Basic身份验证之外的任何其他内容的支持最多可能是不稳定的。即使您使用客户端凭证的摘要或客户端证书auth在OAuth2规范中,我也怀疑现有的OAuth2客户端库是否会为您的特定排列提供内置支持。看看您是否可以使用Google或雅虎等一些重要参与者使用除HTTP Basic auth之外的任何内容来查找客户端凭据授权的示例。在那里使用的东西更有可能得到OAuth客户端库(特别是他们发布的库!)的支持。

如果您拥有连接的两端,这并不重要。您可以随心所欲地找到一个客户端库,它可以让您调整或定制请求以满足您的需求。

如果您希望任意客户端使用客户端凭据授予连接到您的服务,您应该计划提供客户端应如何提供所需凭据的文档和示例代码。现成的OAuth2客户端库可能不会为您的方案提供自动支持。