【问题标题】:What is the standard way to secure a REST API using Tokens?使用令牌保护 REST API 的标准方法是什么?
【发布时间】:2016-04-03 00:52:38
【问题描述】:

这是我想要做的:

我有使用 REST API 提供数据的服务器,但我只希望我的移动客户端(一个 APP)访问它。

我想使用一个类似的系统,用户可以在其中创建电子邮件/密码登录。之后,用户可以使用 API 访问某些数据。

OAuth2 是否适合使用?

或者我只是尝试创建自己的协议并为用户生成令牌。并让用户在所有 API 请求上附加一个令牌。 (这就是我感到困惑的地方。我可以为此使用 OAuth 吗?或者甚至需要这样做吗?如果没有,是否有标准的 HTTP 方法可以做到这一点?我也想使用刷新令牌,但我不确定是否我应该创建自己的方法。

【问题讨论】:

  • 你看过passport.js吗?
  • 如果提供的任何答案有帮助/正确,请接受/投票。

标签: node.js rest security oauth


【解决方案1】:

OAuth2 可能是最好和最广泛使用的解决方案。我会同意的。

实施您自己的身份验证/授权协议几乎总是以灾难告终,除非您对密码学和底层协议有非常深入的了解。

【讨论】:

  • 我看过 OAuth,我认为它用于使用第 3 方 (Facebook) 并让他们对用户进行身份验证。就我而言,我没有任何 3rd 方身份验证器。我是否会进行某种循环并假装我是第 3 方并以这种方式发出身份验证?还是大家都这样?
  • 您的 API 充当 OAuth2 服务器。在验证用户电子邮件/密码凭据后,服务器会授予访问令牌。您可以在此处查看流程的可视化:oauthlib.readthedocs.org/en/latest/oauth2/grants/password.html
【解决方案2】:

请注意,OAuth 不是 authentication 协议 - 这似乎是您需要的 - 而是 authorization 协议。您的服务器是请求 OAuth 提供者拥有的资源的客户端 - 这就是您需要的吗?我猜没有。

你更需要的是一个身份验证协议——通常通过在每个请求中发送一些令牌来工作——@Julian passport.js 提到的似乎正在做你需要的工作。

基本上远离实施自定义解决方案。您确实需要广泛的知识来实施可靠且安全的身份验证方案。

JSON 网络令牌可能也是可行的方法。

【讨论】:

  • 我认为 OAuth 仍然通过让用户在身份验证服务器上输入他们的用户名/密码来进行身份验证,然后身份验证服务器授予用户和资源服务器的访问权限。资源服务器然后将授权给用户。使用令牌。我感到困惑的是,是否有一组严格的调用/协议/http 标头以符合 OAuth 标准?
  • @mskw,我反对使用 OAuth 来保护 REST API,因为这不是 OAuth 的发明。但这并不意味着它不能使用,您在评论中提供的场景是完全有效的。是的,有一个严格的规定,OAuth 是标准化的。
【解决方案3】:

如果客户端应用程序仅由您开发,则不需要 OAuth。仅当您希望允许第三方客户端应用程序以受限权限访问(您的服务的)用户数据时,才需要 OAuth。

相关问题:

  1. Understanding the need of client id, client secret in oauth 2.0
  2. How to verify which resources each user can access with OAuth and OpenID Connect?
  3. OAuth 2.0 Authorization Server and Access Tokens

但是,如果将来您可能希望允许第三方客户端应用程序访问您的系统,那么实施 Resource Owner Password Credentials Grant 可能是明智之举,它是 OAuth 2.0 流之一,来自为未来的可扩展性开始。

【讨论】:

  • 我想使用一种标准方式来保护我的 API,所以我认为 OAuth 发布令牌的方式是可行的方式。如果只有我的应用尝试访问我的 API,其他应用通常如何做到这一点?
猜你喜欢
  • 1970-01-01
  • 2021-05-18
  • 2017-04-20
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
  • 2019-11-03
  • 2017-03-19
相关资源
最近更新 更多