我目前正在开发一个Web应用程序,它现在由一个前端组成,它使用我们编写的REST API显示数据并与之交互。唯一能使用API的是我们的前端网站,在某些时候我们将开发一个移动应用程序。
我已经做了很多关于OAuth如何成为保护API的理想机制的阅读,在这一点上,我开始很好地理解它是如何工作的。
我的问题是 - 因为我永远不会授予第三方客户端访问API的权限,所以OAuth真的有必要吗?它有什么理由有利吗?此外,因为后端只是API,所以没有用户进行身份验证的网关(如果您使用Twitter API编写应用程序,当用户进行身份验证时,他们将被定向到Twitter页面以授予访问权限)然后重定向回客户端)。
我不确定要进入哪个方向。似乎http身份验证和OAuth之间必须有一些方法适合这种情况,但我只是没有得到它。
答案 0 :(得分:1)
从我的观点来看,其中一个支持OAuth而不是其他选项的方案是与不受信任的客户合作,无论这些客户是由您还是第三方开发的。
什么是不受信任的客户?从谁处理授予您API访问权限的凭据开始思考。
例如,您的网络应用程序可以在两个虚拟环境中与您的API进行交互:
第三方Native App也不受信任。使用您的API的恶意开发人员可以保存您平台的凭据和最终用户。
您的原生应用程序是受信任的客户端,可以使用简单的用户名,密码和标识您的应用程序的客户端ID来管理身份验证。
OAuth如何提供帮助? OAuth Authorization code和Implicit拨款可以帮助您解决此问题。这些流程仅适用于支持重定向的客户端,如浏览器。并允许您针对授权服务器对不受信任的客户端和用户进行身份验证,以获取对资源服务器(API)的访问权限,而无需公开凭据。看看RFC,了解它是如何完成的。
OAuth的好处在于它不仅支持这些基于重定向的身份验证流,还支持客户端凭据授予和用户凭据授权。因此,OAuth授权服务器将涵盖所有情况。
答案 1 :(得分:1)
OAuth 2.0最初看起来像是一个PITA,如果你想要自己构建很多,但是大多数语言都有一些非常可靠的OAuth 2.0设置,你可以用不同的数量来摆弄它们。如果您正在使用像Laravel或RoR这样的框架,那么它几乎没有任何工作。
如果您不想按照帖子中的建议重定向用户,请忽略其他有关两条腿流量的评论和答案。您可以使用client_credentials
授权类型让应用程序只提供其客户端ID和密码以换取访问令牌,这很简单。
我会问我们有多私密,因为如果与它交谈的唯一系统是在后端并且没有与外界的互动,那么你可能会把它打开,只是依靠网络来保证它的安全( VPN /防火墙)。
但如果它是"我们的iPhone应用程序使用它"那么你肯定想要使用OAuth 2.0,或类似的东西。
答案 2 :(得分:0)
2腿OAuth可能就是您想要使用的。它基本上是对共享密钥进行哈希处理,但您的优势在于无需自己编写代码。
答案 3 :(得分:0)
您应该将Oauth用于移动设备与API层通信。
但是,这个Web UI层中的Oauth对中间层访问(机器到机器)没有任何好处。
另一方面,存在一些潜在的问题
管理访问令牌到期变得很痛苦。请考虑您的UI必须在群集中的多个节点之间缓存访问令牌。在过期时刷新它,并且UI层与后端协商安全性的事实将偶尔花费额外的时间。
在两条腿的Oauth(OAuth Client Credential,如在v2.0中)不支持任何加密。因此,您仍然需要将密钥和密钥发送到服务器以获取访问令牌。
后端必须实现发布访问令牌,刷新令牌,验证访问令牌等,没有任何明显的好处