时保持客户端凭据保密我们正在构建休息服务,并且我们希望使用OAuth 2进行授权。 current draft(5月19日的v2-16)描述了four grant types。它们是获得授权的机制或流程(访问令牌)。如何在使用OAuth2的资源所有者密码凭证授予类型
- 授权码
- 隐格兰特
- 资源所有者凭证
- 客户端凭证
看来,我们需要支持他们四个,因为他们的目的不同。前两个(也可能是最后一个)可用于需要访问该API的第三方应用程序。授权代码是授权足以幸运地驻留在安全服务器上的Web应用程序的标准方式,而隐式授权流程则是客户端应用程序的选择,它不能完全保留其凭据的机密性(例如,移动/桌面应用程序,JavaScript客户端等)。
我们希望自己使用第三种机制,以在移动设备上提供更好的用户体验 - 而不是让用户访问Web浏览器中的登录对话框等,用户只需直接输入他或她的用户名和密码即可应用程序和登录。 我们还希望使用客户端凭证授予类型来获取可用于查看公共数据的访问令牌,而不与任何用户关联。在这种情况下,这不是什么授权,而是类似于API密钥的东西,我们只使用该密钥来访问已向我们注册的应用程序,如果需要,我们可以选择撤销访问。
所以我的问题是:
- 你觉得我已经明白正确的不同类型的补助金的目的是什么?
- 如何保持您的客户端凭据保密?在第三种情况和第四种情况下,我们都需要客户端上的客户端ID和客户端密码,这听起来不是一个好主意。
- 即使您使用隐式授权类型并且不公开您的客户端密钥,是什么阻止另一个应用程序使用相同的授权机制和客户端ID来模拟您的应用程序?
总而言之,我们希望能够使用来自客户端应用程序的客户端凭证和资源所有者凭据流。这两种流程都需要您以某种方式存储客户端密钥,但客户端是移动设备或JavaScript应用程序,因此很容易被盗取。
我已经做了更多的研究,我认为你是对的 - 没有办法在客户端保持任何秘密。看起来,正如您所建议的那样,我们保护API免遭滥用的最佳选择是实施某种使用情况监控。感谢您的回答! – 2011-06-06 08:48:04
如果您将来遇到任何更好的解决方案,请告诉我! – heavi5ide 2011-06-06 16:00:23
只是为了解,下面的说法正确吗? *当您使用经过身份验证的Web会话(通过cookie等)并在服务器上以“旧方式”进行身份验证时,使用OAuth2的资源所有者密码凭证授予类型时没有更多的安全性,因为经典的Web会话/ cookie可能会传递给其他演员/可能被盗。 – spaudanjo 2014-08-29 07:59:58