Oauth 2.0 了解OAuth2的流程

Oauth 2.0 了解OAuth2的流程,oauth-2.0,discord,Oauth 2.0,Discord,我是OAuth2的新手,我正试图了解整个流程。对于上下文,我考虑制作一个web仪表板,用户可以通过Discord的OAuth2API登录 根据我目前的理解,我认为流程是这样工作的: 用户转到我的站点并单击登录链接 我的站点将它们重定向到与我的客户端ID和查询字符串中的重定向URL 1不一致的位置 Discord将它们重定向回我的站点,重定向URL为1,查询字符串中带有授权代码 我的站点使用此授权代码,以及我的客户ID、客户机密和重定向URL 2,使用所有这些从Discord获取访问令牌和刷新令牌

我是OAuth2的新手,我正试图了解整个流程。对于上下文,我考虑制作一个web仪表板,用户可以通过Discord的OAuth2API登录

根据我目前的理解,我认为流程是这样工作的:

用户转到我的站点并单击登录链接 我的站点将它们重定向到与我的客户端ID和查询字符串中的重定向URL 1不一致的位置 Discord将它们重定向回我的站点,重定向URL为1,查询字符串中带有授权代码 我的站点使用此授权代码,以及我的客户ID、客户机密和重定向URL 2,使用所有这些从Discord获取访问令牌和刷新令牌 如果我确实获得了访问令牌,这意味着用户现在已登录授权代码 我的站点最终将用户重定向到一个页面,现在可以使用访问令牌自由地向Discord的API发送请求,同时保存访问令牌和刷新令牌。举个例子,假设页面声明了他们不一致的用户名 我在向导游学习,而让我困惑的是导游。在第5行,它在查询字符串中提供了上面提到的重定向URL 2。我不知道这是干什么用的

此外,我不太确定一旦我有了访问令牌,如何继续。如果有多个用户登录,我手头就有多个访问令牌。假设用户希望再次访问该页面,我如何唯一地识别他们,并知道使用哪个访问令牌向Discord的API发送请求?对于这个例子,请求会给我他们的用户名,我会显示在页面上

是的,我可能弄错了很多概念。如有任何澄清,将不胜感激

编辑:我对此做了更多的研究,发现了一个新的方法

对于我关于第二个重定向URL的问题,中的示例在执行访问令牌和刷新令牌交换时指定重定向uri。然而,这一新的指南不允许他们进行访问令牌交换。也许他们错过了?正如上面所说:

作为附加的安全措施,服务器应验证此请求中的重定向URL是否与此授权代码的初始授权请求中包含的重定向URL完全匹配。如果重定向URL不匹配,服务器将拒绝该请求并出错

我认为这意味着在第一次访问令牌交换之后,任何刷新令牌交换或具有访问令牌的直接向上API请求都需要匹配所述第一次访问令牌交换的原始重定向uri。所以我应该只使用一个重定向uri,刷新令牌交换/API请求实际上并不使用重定向uri,而是用于进一步的安全性

至于整个登录过程,似乎我必须将获得的访问和刷新令牌链接到用户会话,为此,我将研究使用此passport策略。然后,一旦会话过期,我将丢弃这两个令牌,它们必须再次单击登录,但我可以使用此提示选项:

提示控制授权流如何处理现有授权。如果用户以前使用请求的范围授权了您的应用程序,并且提示设置为“同意”,则会请求他们重新批准其授权。如果设置为“无”,它将跳过授权屏幕并将它们重定向回重定向URI,而不请求它们的授权

从那里,我想我只需要存储与该用户关联的新访问和刷新令牌


如果能指出我思考过程中的任何错误,我将不胜感激

你的总结对我来说似乎很好,克劳德先生-沃思先生澄清了你是在开发SPA还是在开发服务器端的旧web应用程序。最常见的是第一种是无cookie的,而第二种是在cookie中存储刷新令牌。关键是要理解OAuth消息工作流是什么样子的。对于SPA和API,我的这篇文章可能会帮助您澄清您想要什么: 很乐意回答任何后续问题