【问题标题】:What is an API token [closed]什么是 API 令牌 [关闭]
【发布时间】:2013-07-21 00:43:59
【问题描述】:

我正在尝试找出处理我的移动应用程序(iOS 和 Android)和 API (PHP) 用户身份验证的最佳方式。

根据我的研究,选项是:

基于 HTTPS 的基本身份验证 - 检查每个请求的用户名/密码。

Sessions - 在每个请求中发送一个会话 ID;服务器维护状态。因此,应用程序会在后续请求中发送用户名/密码和服务器检查登录用户,就像我的网站一样。

API 令牌 - 移动应用程序发送用户名/密码并接收回一个令牌,然后将其附加到后续请求。令牌存储在数据库中并在每个请求上检查。

我猜我对 API 令牌的解释是不正确的,因为它们看起来与会话相同,因为我将会话 ID 存储在数据库中。

  1. 能否更正我对 API 令牌的解释。它们是干什么用的?它们与会话 ID 有何不同?
  2. API 令牌有哪些优势?
  3. oAuth(如果我们要简化它的使用)只是一种用于创建“API 令牌”的协议吗?

【问题讨论】:

    标签: php android ios api authentication


    【解决方案1】:

    我不是专家,但我会给你几美分我捡到的:

    1) API Tokens 有点笼统。通常,API 令牌是请求访问您的服务的应用程序的唯一标识符。您的服务将生成一个 API 令牌供应用程序在请求您的服务时使用。然后,您可以将他们提供的令牌与您存储的令牌进行匹配以进行身份​​验证。

    可以使用会话 ID,但其用途与 API 令牌不同。会话 id 不是一种身份验证形式,而是授权的结果。通常,一旦用户被授权使用资源(例如您的服务),就会建立会话。因此,当用户被授予对资源的访问权限时,会创建一个会话 ID。 API 令牌是类似于用户名/密码的身份验证形式。

    2) API 令牌替代了通过 HTTP 发送一些用户名/密码组合,这是不安全的。但是问题仍然存在,有人可以取而代之使用 API 令牌。

    3) 在某种程度上是的。这是一种保持 API 令牌“新鲜”的方法。当您想要使用服务时,您请求访问令牌,而不是传递相同的 API 令牌。 OAuth 2.0 步骤如下:
    a) 使用某种凭据发送到服务的请求
    b) 成功的响应返回一个代码
    c) 使用代码发出另一个服务请求
    d) 成功的响应返回用于签署每个 API 请求的访问令牌,从那时到完成。

    目前,许多大型服务提供商都使用 OAuth 2.0。这不是一个完美的解决方案,但它可能是目前使用的最安全、最广泛的 API 安全方法。

    【讨论】:

    • 您能否详细说明“会话 ID 不是一种身份验证形式,而是一种授权结果。”?
    • 更新了我的答案,简而言之 - 会话 ID 不是一种身份验证形式,API 令牌是。
    • 您是说 API 密钥仅识别来自我的应用程序的请求,与通过应用程序登录的用户无关?因为根据我的阅读,我的 API 应该是无状态的并且不使用会话。
    • 没错。 API 令牌在应用程序向服务的每个请求中传递,以便服务知道谁在请求资源。我也不建议使用会话,你问;)
    • 是的,我很困惑!好的,暂时忘记请求的来源; Android 应用程序打开并向用户请求用户名和密码,并使用基于 SSL 的基本 HTTP 身份验证发送它们,后续请求也发送用户名和密码。这是一种方法。那么,如果我不想选择上述基本身份验证方法,那么 oAuth/tokens 会出现在哪里?
    猜你喜欢
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2010-11-29
    • 2018-02-02
    • 2017-11-11
    • 1970-01-01
    • 2018-04-17
    • 2020-01-04
    相关资源
    最近更新 更多