与oauth2的restful api身份验证混淆

时间:2013-04-22 19:13:25

标签: api rest authentication oauth oauth-2.0

我做了一些关于restful api身份验证的调查。大多数人都指出了Oauth2的resti api身份验证。我查看了一些资源,特别是这个链接https://developers.google.com/accounts/docs/OAuth2

在我看来,Oauth2适用于第三方应用,用于访问google / facebook(或其他数据提供商)中的用户数据。

我们的问题是我们拥有数据,我们不需要访问客户的任何第三方数据,我们的客户也不需要任何第三方数据。我们希望通过某种身份验证来保护我们的api。

对于我们的情况,我们的resti api身份验证的便捷技术是什么?我们将像这样揭露我们的api

 https://ourdomain.com/api/<endpoint>

我们的客户可以先访问网站注册https://ourdomain.com,他们应该能够从我们的网站获取clientId和clientKey以访问apis。我们的客户应该能够通过某种身份验证来消费

3 个答案:

答案 0 :(得分:13)

在oAuth 2.0中,有几种类型的授权类型。授权类型只是一种交换访问令牌的某种凭证的方法。通常,oAuth指的是具有授权代码授权的第三方使用。这意味着将用户重定向到资源所有者的网站进行身份验证,这将返回授权码。

这显然对第一方oAuth使用没有意义,因为您是资源所有者。 oAuth 2.0考虑了这一点,并为此目的包含了资源所有者密码凭证授权。在这种情况下,您可以在第一方级别交换访问令牌的用户名和密码。

有关详细信息,请参阅http://tools.ietf.org/html/rfc6749#section-4.3

答案 1 :(得分:6)

如果我理解正确,那么您需要的是类似于OAuth的方式,您可以执行完全相同的操作,而不是授予第三方应用访问用户资源的权限。

在OAuth中,有一个中央系统,通过检查应用程序的凭据+用户的凭据并输出授权令牌来管理身份验证和授权。有多个端点可以接受这些授权令牌。

令牌基本上是加密字符串,其中包含有关用户凭据的信息以及您的应用可能需要的其他一些信息。

您需要(我相信)是一个类似的身份验证端点,客户端使用其凭据进行命中并获取令牌。

所以,
i)创建一个注册表/控制台,客户可以在其中注册并获取其凭据。看看this ii)定义HTTP端点,其中用户交换其凭证以获取访问令牌+刷新令牌 iii)客户端可以使用访问令牌访问资源端点,以对任何端点进行身份验证呼叫 iv)在后端,您需要一个通用服务来验证令牌并从中提取信息。

PS - 这只是一个最小的系统,会有很多安全考虑因素,例如某些未经授权的应用程序可以访问某些客户端的访问令牌。
您可以找到有关CSRF攻击,日期,时间戳和其他减轻安全问题的方法的大量信息。

答案 2 :(得分:2)

只是要清楚原来的问题:

OAuth2至少需要客户端和服务器

OP想知道如何保护REST API,以及为什么每个人都在谈论第三方认证提供商(Google,Facebook,...)

这里有两种不同的需求:

1 - 能够保护个人API(ourdomain.com)

Client             Server
Consumers  <---->  Your API

2 - 能够使用公共API(例如获取用户的Google联系人列表)

Client             Server
You        <---->  Google APIs

OP实际上需要第一个:在自己的API前面实现OAuth2服务器 有many existing implementations for all languages/frameworks on Github

最后,这里是one nice Oauth2 technical explanation,我在这里无耻地采用其中一个模式:

Google OAuth2 schema

不,我不是在谷歌工作,我只是将谷歌作为公共API供应商的例子。