【问题标题】:access token usage in authentication身份验证中的访问令牌使用
【发布时间】:2016-02-24 07:19:14
【问题描述】:

我不明白在身份验证中使用访问令牌的意义。以下是我采取的一段解释,但我仍然感到困惑。由于每个 api 调用仍然去数据库查找令牌,每个 http 请求的用户名和密码检查有什么不同?

而不是强制客户端每次发送用户名和密码 请求您可以在 RESTful 中使用“get_access_token”功能 接受用户名和密码并以 令牌,它是某种独一无二的加密哈希,具有 一些与之相关的到期日期。这些令牌存储在 每个用户的数据库。然后客户端发送访问令牌 后续请求。然后将验证访问令牌 数据库而不是用户名和密码。

【问题讨论】:

    标签: rest security authentication login


    【解决方案1】:

    使用访问令牌可以限制用户名和密码被使用和通过网络发送的时间。

    您希望您的用户名和密码、SSN 或其他敏感数据被存储和传输多少次?您希望在每个请求中都这样做吗?

    【讨论】:

    • 令牌从何而来?它是在身份验证成功后即时生成的,对吗?那么我应该在哪里存储令牌以使其像会话一样?
    【解决方案2】:

    首先,访问令牌通常通过检查数字签名来验证,这不需要接收服务与发布服务器对话。客户端获取一次访问令牌并使用它直到它过期。

    但是,即使每次调用都必须根据数据库检查令牌(例如,使用引用令牌时),令牌仍然比在每次调用时发送用户名和密码更可取。它们消除了客户端将密码保存在内存中(或其他地方)的需要,因为密码很容易被窃取。

    【讨论】:

    • 如果黑客拿到了我的令牌,意味着他可以访问我受保护的 api,他也可以破坏一切。
    • @Jennifer 是的,如果黑客得到了你的令牌,他可以做任何你可以用那个令牌做的事情。您可以限制令牌的范围。用户名/密码通常可以完全控制。
    【解决方案3】:

    (1) 访问令牌不如您的密码敏感。访问令牌通常会在短时间内过期(这是 Oauth 威胁模型中的要求),而密码往往是长期的。如果有人抢了你的访问令牌,他们所能造成的损害是有限的。如果他们窃取了您的密码,那么他们可以造成很多损害。特别是如果您在多个网站上使用相同或相关的密码。

    (2) 如果服务器安全地实现了密码验证,那么他们应该使用 slow 函数,如 PBKDF2、bcrypt 或 scrypt 来验证您的密码。这些函数的设计速度很慢,因此如果有人可以访问数据库,他们将无法反转许多密码:请参阅Our password hashing has no clothes。鉴于密码检查应该很慢,我们不想经常这样做!然而,访问令牌的验证要快得多。

    (3) 授予您访问资源的系统(“资源提供者”)可能与检查您的身份的系统(“身份提供者”)不同。例如,包括 StackOverflow 在内的许多网站都允许您使用 gmail 帐户登录。在这种情况下,Google 是身份提供者,而 StackOverflow 是资源提供者。你真的想向 StackOverflow 提供你的 gmail 密码吗?我希望不会。

    【讨论】:

    • 1) 如何生成令牌并使其过期? 2)理解这一点 3)所以认证是在stackoverflow中完成的,它会返回一个令牌来在gmai中做事?如果我是对的,你如何让令牌在 gmail 中移动?我正在使用restful api,所以它是无状态的我应该如何使用令牌?将其存储在本地存储中?还是在内存中使用?
    • (1) 您在数据库中设置到期时间,并在您的代码中强制执行。 (3) 不,相反:在 gmail 中完成身份验证,它返回对 Stack Overflow 有效的令牌。如果您允许从外部实体进行身份验证,您应该只担心 (3)。许多应用仅在内部处理身份验证。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2023-03-17
    • 2014-02-11
    • 2023-03-20
    相关资源
    最近更新 更多