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

Web services 我可以使用HTTP基本身份验证来验证web API中的应用程序和用户吗?,web-services,http,rest,authentication,Web Services,Http,Rest,Authentication,我为第三方应用程序(客户端)提供了一组公共web API供其使用。我想跟踪这些客户机如何使用我的API,所以我需要为这些客户机生成令牌。同时,我需要对真实用户进行身份验证,不同的用户可以看到相同资源的不同表示。我知道OAuth2可以解决我的问题,但它很复杂。我更喜欢对用户和应用程序使用HTTPs+基本身份验证,因此我将在HTTP头中为客户端和实际用户使用不同的属性。这是否合适?一般来说,基本身份验证不起作用,因为它需要所有请求的凭据(用户名/密码),而这不是您想要的 首先,让我们分析您的需求:

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

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

首先,让我们分析您的需求:

  • 您希望最终用户能够访问您的服务
  • 您希望授权的第三方应用程序能够访问其他最终用户数据(经用户批准)
  • 您不希望第三方应用程序获得其他最终用户凭据
因此,我们可以将理想的工作流程概括为:

  • 最终用户启动第三方应用程序并说“我想让您访问该服务”
  • 第三方应用程序转向您的服务API并说“我想访问此用户的数据”
  • 您的服务将显示一个访问授权页面,并说“您想授权此应用程序访问您下面列出的数据吗?”(重要提示:此访问授权服务由您而不是第三方应用程序提供)
  • 最终用户同意并输入用户名/密码(最终用户需要识别此访问授权页是您提供的!)并授予
  • 您的访问授权页生成一个令牌,第三方通过以下方式使用该令牌访问您的数据:
  • 第三方应用程序向您的服务发送请求,并说“这是最终用户的授权令牌,请给我数据”
  • 您的服务验证了第三方和最终用户的令牌并作出响应
  • 只要令牌未过期,第三方应用程序可以执行更多请求
  • 基于上述工作流程,最终用户只需输入1次用户名/密码,因此基本身份验证无法满足您的要求

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

    要做到这一点,在没有OAuth的情况下,您需要实现令牌生成、验证和过期机制

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


    希望这有帮助

    步骤1到8解释典型的OAuth工作流。为什么基本身份验证不能满足我的要求?请解释一下为什么基本身份验证不能满足我的需要?我是否可以首先向客户端颁发令牌(客户端和API提供程序之间的共享密钥,您可以将其视为基本身份验证中的密码),每当客户端使用API时,客户端都需要在HTTP头中提供该令牌。因此API提供者可以跟踪谁使用了API。Bargitta,是的,这是一个典型的OAuth工作流,因为您需要的是这样一个工作流程。:-)基本身份验证不符合您的要求,因为每个请求都需要在标题中使用用户名:密码,而且您不想将这个秘密“告诉”第三方,我相信!顺便说一下,您会看到一个“令牌”,在一个基本的经过身份验证的请求中表示用户。但这不是一个“令牌”,实际上这是用户名:密码的base64编码字符串,例如“user1:password”将被编码为“dXNlcjE6cGFzc3dvcmQ=”注意:编码不是加密,但它仍然是凭证的明文。通过您的
    我可以先发出令牌吗(客户端和API提供程序之间的共享秘密,您可以将其视为基本身份验证中的密码)到客户端
    您实际上还描述了OAuth工作流。注意:您提到的共享“令牌”是加密文本,而不是username:password的base64字符串,因此您无法将其放入基本身份验证中