我有一个充当 OAuth 1.0a 提供商的 Web 服务。 Web 应用程序通过 OAuth 1 工作流程来获取对用户资源的访问权限。到目前为止,一切都很好。
客户端 Web 应用程序需要与服务进行通信以满足其他需求,以交换未链接到特定用户/资源所有者的私有数据。为此,使用 OAuth2 似乎是一个好主意,特别是 Client Credentials Grant (4.4)(正是为此设计的)。
从“机密客户端”(根据 OAuth 规范,Web 应用程序属于此类),您可以直接对客户端进行身份验证并获取访问令牌。
编辑:当然,我所说的 Web 应用程序类型是 html+javascript,但身份验证和与提供商/Web 服务的通信完全发生在服务器端。凭证(客户端密码、密钥等)都存储在(并且永远不会离开)服务器上。
根据规范,身份验证可以通过“用户名+密码”(使用 HTTP Basic 身份验证方案的客户端密码)或“其他授权方法”进行。
我无法找到任何关于这些“其他授权方法”可能是什么的线索。
由于我们对 OAuth1 使用私钥/公钥对,我们也可以将它们用于此任务吗?
在这一点上,规范似乎非常自由(而且非常模糊!)。
我想要各种库支持的东西,以便第三方客户端可以使用标准库(例如 DotNetOpenAuth)轻松实现它。如果需要,可以合理地假设需要为自定义方法完成一些编码,只要它可以容纳现有的库(插件?)
除了 HTTP Basic 之外,还有什么“标准”或易于使用的内容可用于 OAuth 2 身份验证吗?
如果您所说的 Web 应用程序是指在客户端浏览器中运行并且需要向您的服务发出安全请求的 JavaScript 和 HTML 应用程序,那么它就不是“机密客户端”。您无法将机密存储在基于浏览器的应用程序中,因为它们对所有人都可见。
如果您所说的 Web 应用程序是指需要发出服务器到服务器请求的服务器端应用程序,那么它就是“机密客户端”,因为执行代码和机密无法接受公众监督。
我将“其他身份验证方法”解释为可以在一个请求中完成的通过 http(或 https)惯用的任何身份验证方案。使用 TLS 的客户端证书身份验证也可能属于此范围。我认为 OAuth2 4.4 客户端凭据授予的主要部分是客户端应用程序通过现有身份验证方法直接向 OAuth 令牌服务提供凭据。该示例使用 HTTP 基本身份验证,但这只是一个示例。
客户端凭据授予与资源所有者凭据授予 (4.3) 的主要区别在于,资源所有者授予在 http 请求正文中而不是在授权标头中提供用户凭据。在资源所有者授权的情况下使用其他授权方法将很困难。
在使用其他身份验证方法与客户端凭据授予时最大的警告是,OAuth2 客户端库对 HTTP 基本身份验证以外的任何内容的支持最多可能是不稳定的。即使您对客户端凭据使用摘要或客户端证书身份验证符合 OAuth2 规范,我也怀疑现有的 OAuth2 客户端库是否会对您的特定排列具有内置支持。看看您是否可以找到一些大公司(例如 Google 或 Yahoo)使用 HTTP 基本身份验证以外的任何方式授予客户端凭据的示例。那里使用的东西更有可能受到 OAuth 客户端库的支持(尤其是它们提供的库!)。
如果您拥有连接的两端,那么这并不重要。您可以做任何您想做的事情,并找到一个客户端库,它可以让您调整或定制请求以满足您的需求。
如果您希望任意客户端使用客户端凭据授予连接到您的服务,您应该计划提供文档和示例代码,说明客户端应如何提供您所需的凭据。现成的 OAuth2 客户端库可能不会为您的方案提供自动支持。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)