【问题标题】:OAuth Password Grant ReplacementOAuth 密码授权替换
【发布时间】:2020-10-05 06:26:13
【问题描述】:

我目前正在研究 OAuth2 和 OIDC。我知道所有授权类型是什么(即授权类型“授权代码”、“客户端凭据”、“设备令牌”和“刷新令牌”)。但是,这四种授权类型不包括传递用户名和密码的选项。我知道有一个密码流,但是根据Security Best Practices,这种授权类型是被禁止的。

我也遇到了密码流程的问题,但我不知道如何替换它 - 毕竟,用户有时需要输入他们的凭据。

我有什么遗漏吗?我原以为只有一个受信任的客户端使用密码流,并且当用户想要登录时,所有其他客户端都会被重定向到。

【问题讨论】:

  • 我遇到了完全相同的问题。我有一个 API,我需要允许客户端以用户身份进行身份验证,但客户端的用户在客户端系统上有自己的帐户,因此无法与客户端向 API 进行身份验证的用户帐户交互。密码流是唯一合适的方法。 API 的凭据保存在客户端服务器中,不会暴露给用户,所以密码流肯定是合适的吗?
  • 我认为密码授予的弃用没有考虑到客户端需要使用 API 以用户身份进行身份验证但登录到客户端的用户与客户端的用户不同的情况以身份登录 API。

标签: authentication oauth oauth-2.0 authorization


【解决方案1】:

我想我现在对这个问题有了更好的理解,尽管我可能会在这里对您的问题稍微提出我自己的要求。

密码授予流程以前允许单个客户端使用 API 对多个最终用户进行身份验证。假设您经营一家商店,而您的快递公司有一个 API。您的商店设置了一个客户,您的每个员工都可以通过该客户登录到他们自己的帐户。 在这种情况下,他们需要提供客户 ID 和密码以及密码授予允许的用户名和密码才能登录。 但是,为了将用户凭据传递给 API,客户端需要以纯文本形式处理它们。

这就是授权代码流程接管的地方。本质上,它将登录过程推迟到 API,用户在那里输入他们的凭据。 但是如果你的客户是 API 用户呢?商店用户登录到商店应用程序,商店应用程序以商店而不是最终用户身份使用交付 API 进行身份验证。

客户端凭据授予是此处的合适选择。 documentation 谈到在“用户上下文之外”使用客户端凭据授予,但这并不意味着客户端本身不能与由客户端 ID 和密码识别和验证的 API 内的用户相关联。 在这种情况下,客户端拥有处理登录 API 所需的所有凭据,而无需用户干预。

在 API 处理最终用户身份验证的任何情况下,都可以期望用户积极参与该过程并因此能够与提供的登录屏幕进行交互由 API 通过身份验证代码流。

【讨论】:

    猜你喜欢
    • 2018-10-31
    • 2017-01-10
    • 2012-10-01
    • 2018-11-21
    • 2015-09-16
    • 1970-01-01
    • 2020-09-08
    • 2014-06-10
    • 2016-09-11
    相关资源
    最近更新 更多