正确的授权码OAuth2流是什么?

时间:2020-08-03 16:14:00

标签: oauth oauth-2.0

我目前不熟悉OAuth2.0授权代码流程,并且已经阅读了许多有关它的文章,并且目前我仍然不知道如何正确实现它。到目前为止,我对流程的了解:

  1. 用户使用OAuth登录
  2. 用户被重定向到授权服务器以获取授权代码
  3. 回调权限/范围
  4. 已重定向到授权服务器以获取访问令牌,以换取授权代码
  5. 使用访问令牌重定向回客户端
  6. 客户端使用访问令牌访问资源服务器。

现在,我仍然感到困惑的是,登录验证应该放在哪里(用户名-密码登录)?在进入OAuth流程之前是否需要进行单独的验证,一旦用户有效,就应该返回到流程?

3 个答案:

答案 0 :(得分:0)

登录验证来了(用户名-密码登录)?

OAuth 2.0 NOT an Authentication protocol

The OAuth 2.0 specification defines a delegation protocol

任何使用用户名的用户-密码都在OAuth 2.0之外,您应该查看Open ID Connect,它是基于OAuth 2.0构建的身份验证协议。

Best current Practice for Authorization Code flow用于在OAuth或OpenID Connect上使用PKCE

答案 1 :(得分:0)

通常的解决方案是使用成熟的安全性库将OAuth 2.0和Open Id Connect从您的代码外部化。当您不熟悉这种类型的安全性时,就会有一个学习过程。我的资源将使您了解如何将它们组合在一起:

您集成的库取决于您所使用的技术堆栈。上面的资源用于单页应用程序和NodeJS API。

答案 2 :(得分:0)

我有一些资源可以解释OAuth 2.0 using Google Sign in as an example。让我尝试根据您的问题重新措辞。

让我们以用户使用“使用Google登录”登录对讲机为例。

  1. 用户按下“使用Google登录”按钮。这将重定向到身份提供者/authorize端点(每个提供者可能不同),该端点将转到其登录页面。
  2. 用户被重定向到Google的帐户页面。如果尚未登录,则用户可以在此处输入他们的Google电子邮件/密码
  3. Google使用authorization_code重定向回到对讲机(例如,它重定向到https://intercom.com/authcallback?code=XYZ...
  4. 对讲机的后端服务器将此authorization_codeclient_idclient_secret(从其在Google的项目中)一起发送,并收到access_token(通常发送到{{1} }端点)
  5. 然后,对讲机可以使用/token从Google访问用户的个人资料。

因此,为回答您的问题,用户可以在OAuth提供程序的页面中输入其电子邮件/密码。请记住, OAuth 2.0没有指定提供者如何验证用户身份。这意味着,OAuth提供者可以通过不同的方式来验证其用户,例如电子邮件/密码,email magic-link, SMS OTP等。您的网站仅应信任OAuth提供者,他们正在为您正确验证用户。


一些额外的资源可帮助您进一步了解OAuth 2.0: