使用用户身份验证为特定客户端保护API

时间:2014-10-25 12:57:23

标签: api rest oauth oauth-2.0

我有一个RESTful API,我希望只有特定的受信任桌面客户端才能代表用户访问API。当然,正如大多数人所说,OAuth是要走的路。但是我在尝试理解为什么以及如何使用OAuth时遇到了一些问题。

首先,我不希望我的服务器存储密码,因此我决定使用其他OAuth / OpenID提供程序进行登录。此外,我的桌面客户端也可以与API进行交互。所以服务器需要检查是否:

  • 请求来自此特定客户
  • 请求来自有效用户

表示用户不应该看到“允许此应用程序代表您进行交互” - 登录时屏幕,我不需要任何范围。

我已经读过我应该选择的两条OAuth1.0a,但后来他们说不推荐使用OAuth1.0a,你应该考虑使用OAuth2进行新的集成。我已经实现了类似于Amazon AWS的方法,但后来我注意到我只能用这种方法验证客户端而不是用户。

那么,我的需求是什么?
我确信之前已经有人问过这个问题,不知何故,但是这太令人困惑和沮丧了。

1 个答案:

答案 0 :(得分:1)

RFC 6749(OAuth 2.0)中,定义了四个流程。其中,“Client Credentials Flow”不需要用户交互。在流程中,只有通过提供客户端凭据(=客户端ID和客户端密钥)才能向客户端应用程序发出访问令牌。

你应该做的似乎是:

  1. 为客户端凭据流实施token endpoint。在实现中,应检查客户端ID和客户端密钥,并发出访问令牌。

  2. 实现API(在OAuth 2.0中称为“受保护资源端点”)。在实现中,您应该检查客户端应用程序提供的访问令牌是否与预期的客户端应用程序相关联。仅当客户端应用程序是预期的应用程序时,API才应返回有效响应。 RFC 6750(承载令牌使用)列出了在令牌端点上呈现访问令牌的三种方式。