24

我对restful api身份验证做了一些调查。大多数人指出 Oauth2 是为了进行 restful api 身份验证。我查看了一些资源,尤其是这个链接https://developers.google.com/accounts/docs/OAuth2

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

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

对于我们的案例,我们的 restful api 身份验证的便捷技术是什么?我们将像这样公开我们的 api

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

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

4

3 回答 3

15

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

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

有关详细信息,请参阅https://www.rfc-editor.org/rfc/rfc6749#section-4.3 。

于 2014-10-06T18:37:40.403 回答
6

如果我理解正确的话,你需要它类似于 OAuth 的方式是你做完全相同的事情减去授予 3rd 方应用程序访问用户资源的权限。

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

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

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

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

PS - 这只是一个最小的系统,会有很多安全考虑,比如如果一些未经授权的应用程序可以访问某些客户端的访问令牌。
你可以找到很多关于 CSRF 攻击、noonces、时间戳和其他缓解安全问题的方法的信息。

于 2013-04-23T10:32:57.323 回答
3

只是为了清楚原来的问题:

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 服务器。
Github 上有许多适用于所有语言/框架的现有实现

最后,这是一个很好的 Oauth2 技术解释,我在这里无耻地采用它的一种模式:

谷歌 OAuth2 架构

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

于 2017-01-25T16:59:38.280 回答