我可以使用HTTP基本身份验证来验证Web API中的应用和用户吗?

时间:2014-03-25 09:35:30

标签: web-services http rest authentication

我为第三方应用(客户)提供了一组公共Web API供您使用。我想跟踪这些客户端如何使用我的API,因此我需要为这些客户端生成令牌。同时,我需要对真实用户进行身份验证,不同的用户可以看到相同资源的不同表示。我知道OAuth2可以解决我的问题,但它很复杂。我更喜欢对用户和应用程序使用HTTPs +基本身份验证,因此我将在HTTP标头中为客户端和真实用户使用不同的属性。这是合适的方式吗?

1 个答案:

答案 0 :(得分:0)

一般来说,基本身份验证不能完成这项工作,因为它需要所有请求的凭据(用户名/密码),这不是您想要的。

首先让我们分析您的要求:

  • 您希望最终用户能够访问您的服务
  • 您希望授权的第三方应用能够访问其他最终用户数据(获得用户批准)
  • 您不希望第三方应用获得其他最终用户凭据

因此,我们可以总结理想的工作流程:

  1. 最终用户启动第三方应用并说“我想让您访问该服务”
  2. 第三方应用程序转向您的服务API并说“我想访问此用户的数据”
  3. 您的服务会显示访问权限页面并说“您是否要授予此应用以访问以下列出的数据?” (重要提示:此访问授权服务由您而非第三方应用程序提供)
  4. 最终用户同意并输入用户名/密码(最终用户需要识别此访问权限页面来自您!)并授予
  5. 您的访问权限页面生成令牌,第三方使用令牌通过以下方式访问您的数据:
  6. 第三方应用程序向您的服务发送请求并说“这是最终用户的授权令牌,请将数据提供给我”
  7. 您的服务已验证第三方和最终用户的令牌并作出回应。
  8. 只要令牌未过期,第三方应用就可以提出更多请求。
  9. 基于上述工作流程,最终用户只输入1次用户名/密码,因此基本身份验证不符合您的要求。

    实际上,您的要求是基于令牌的身份验证(确保您需要令牌过期机制):第三方仅获取最终用户的授权令牌而非凭据。

    为此,在没有OAuth的情况下,您需要实现令牌生成,验证和到期机制。

    当然,您可以将这些令牌放在HTTP标头或URL中,这取决于您的偏好或设计理念。

    希望这有帮助!