API设计:HTTP基本认证与API令牌

我目前正在为Web应用程序的公共Web API创建一个身份验证系统。 鉴于每个用户帐户都有一个API密钥,并且每个请求都必须经过身份验证,所以我有两种选择:

  • 使用HTTP基本认证,就像GitHub一样。

    请求必须发送到URL

    http://api.example.com/resource/id
    with basic authentication
    username: token
    password: the api key
    
  • 传递API令牌作为查询字符串参数。

    请求必须发送到URL

    http://api.example.com/resource/id?token=api_key
    
  • 还有第三种选择是在URI内传递令牌,但我诚实地不喜欢该解决方案。

    你会采用哪种解决方案,为什么?


    我认为HTTP Basic Auth应该可以,但只是为了真正简单的需求。

    完整(和最终)的解决方案恕我直言,是实施OAuth提供商。 这并不复杂,它是一个简单的协议,为您提供了很多灵活性。 此外,它似乎是目前许多大公司实施它的趋势,并得到许多图书馆的支持。


    最好的办法可能是在头部使用一个API密钥(例如'Authorization:Token MY_API_KEY'),而不是作为一个url参数:

    HTTP基本身份验证的优势:

  • 更方便,因为您可以轻松过期或重新生成令牌,而不会影响用户的帐户密码。
  • 如果受到威胁,漏洞仅限于API,而不是用户的主帐户
  • 每个账户可以有多个密钥(例如,用户可以并排“测试”和“生产”密钥。)
  • 优于URL中API键的优点:

  • 通过防止用户无意中共享嵌入其中的凭证的URL,提供额外的安全措施。 (另外,URL可以在诸如服务器日志之类的东西中出现)

  • 很多时候,我不得不考虑如何验证API上的用户/请求,并在比较了更多解决方案后,最终使用了我不需要的Amazon解决方案,或者我无法使用OAuth。 此解决方案基于防止“中间人”问题的签名,因为基本身份验证和传递简单令牌都会发送纯文本数据。 是的,你可以添加SSL,但这会增加系统的复杂性......

    链接地址: http://www.djcxy.com/p/33781.html

    上一篇: API Design: HTTP Basic Authentication vs API Token

    下一篇: User model other than AUTH