【问题标题】:Securing an API for specific clients with user authentification使用用户身份验证保护特定客户端的 API
【发布时间】:2014-11-10 14:26:39
【问题描述】:

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

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

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

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

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

那么,满足我的需求的方法是什么?
我敢肯定,以前在某个地方,不知何故,已经有人问过这样的问题,但这太令人困惑了,而且令人沮丧。

【问题讨论】:

    标签: api rest oauth oauth-2.0


    【解决方案1】:

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

    看来你应该做的是:

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

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

    【讨论】:

    • 谢谢!几天前我结束了这件事。完美运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2017-09-03
    • 2019-12-02
    • 2018-06-15
    相关资源
    最近更新 更多