代码之家  ›  专栏  ›  技术社区  ›  Snake

api请求的访问令牌与用户名/密码

  •  1
  • Snake  · 技术社区  · 6 年前

    我知道这似乎是一个微不足道的问题,但我找不到至少能让我安心的答案。

    如果移动应用程序正在与服务器通信,那么他们通常会登录,并获得一个访问令牌,以便在会话的剩余时间内使用任何未来请求。

    为什么不在每个请求中通过HTTPS传递用户名和密码,而不是访问令牌呢。访问令牌需要通过数据库进行验证,用户名/密码的组合也需要验证。如果他们做同样的事情,为什么还要进行访问令牌的额外工作?我知道我错过了一些东西,但我想不出来

    2 回复  |  直到 6 年前
        1
  •  6
  •   Gabor Lengyel    6 年前

    您是对的,访问令牌的验证方式与用户名和密码几乎相同。当访问令牌有效时,它与用户名和密码几乎相等。在某些情况下(取决于您的威胁模型),甚至可以在每个请求中发送用户名和密码,可能不是来自移动应用程序,但例如在服务器到服务器请求中,使用适当的控件。

    但是,您不希望在来自移动应用程序的每个请求中发送密码,主要是因为这样您就必须存储密码。

    密码(或用户)的问题在于它们被重用。密码是一个有价值的目标,因为同一密码可能会在多个服务上使用。因此,您可以将其交换为寿命较短的访问令牌,如果被盗,则会降低用户的风险。而且你不能轻易地撤销密码——强迫用户更改密码是一件麻烦事。撤销acces stoken很容易。

    另一点是,有时(在OAuth流中),您的应用程序甚至不允许访问实际密码。当您的用户使用第三方身份提供商(如facebook)登录时,他们不希望您的应用程序收到他们的facebook密码。他们只是去facebook,用他们的凭证交换访问令牌,你只能看到令牌,如果你愿意,你可以通过facebook验证。但你从来没有真正获得用户的facebook密码。当然,这仅在身份提供者是第三方时有效。

        2
  •  2
  •   T.Todua Laurent W.    6 年前

    我认为答案是关于安全和保障。

    始终建议使用访问令牌,而不是用户名&密码,因为:

    • 访问令牌(在大多数服务中)可以轻松生成、阻止、监控其使用情况&来自您帐户的统计信息,可以设置为可过期,可以具有受限权限,等等。。。当然,你完全可以删除它。用户名&密码是主密码,可以控制访问令牌。

    • 关于速度-我不认为授权与用户&PW在速度上有任何显著的优势。