我是OAuth2的新手,我试图了解整个过程。对于上下文,我正在考虑制作一个Web仪表板,以便用户通过Discord的OAuth2 API登录。
根据目前为止的理解,我认为流程是这样工作的:
我正在向this guide学习,而令我困惑的是指南中的this code snippet。在第5行,它在查询字符串中提供了上述的重定向URL#2 。我不确定它是干什么的。
此外,我不太清楚一旦获得访问令牌后如何继续。如果有多个用户登录,则手边会有多个访问令牌。假设用户想再次访问页面,我如何唯一地标识他们并知道使用哪个访问令牌将请求发送到Discord的API? (对于此示例,请求将向我提供其用户名,该用户名将显示在页面上)
是的,我可能有很多错误的概念。任何澄清将不胜感激!
编辑:我对此进行了更多研究,并找到了much better guide here。
对于我有关第二个重定向URL的问题,在进行访问令牌和刷新令牌交换时,official documentation中的示例指定了redirect_uri
。但是,此新指南无需进行访问令牌交换。也许他们错过了吗?正如other stack overflow question所说:
作为一种额外的安全措施,服务器应验证此请求中的重定向URL完全匹配此授权代码的初始授权请求中包含的重定向URL。如果重定向URL不匹配,则服务器将拒绝请求,并显示错误。
我认为这意味着在第一次访问令牌交换之后,任何刷新令牌交换或带有访问令牌的直达API请求都需要与所述第一次访问令牌交换的原始redirect_uri
相匹配。因此,我应该只使用一个redirect_uri
,刷新令牌交换/ API请求实际上并不使用redirect_uri
,而是用于进一步的安全性。
对于整个登录过程,似乎我必须将获得的访问和刷新令牌链接到用户会话,为此,我将研究使用这种护照策略passport-discord。然后,会话期满后,我将丢弃这两个令牌,并且它们将不得不再次单击登录,但是我可以使用以下prompt
选项:
提示控制授权流程如何处理现有授权。如果用户先前已使用所请求的范围对您的应用程序进行了授权,并且提示设置为同意,它将要求他们重新批准其授权。如果设置为none,它将跳过授权屏幕,并将其重定向回您的重定向URI,而无需请求其授权。
我想从那里存储与该用户关联的新访问权限和刷新令牌。
如果能指出我的思维过程中有任何错误,我将不胜感激!
答案 0 :(得分:1)
您的总结对我来说似乎很好,Cloud先生-值得澄清您是在开发带有服务器端的SPA还是(旧的)Web应用程序。最常见的是第一个是无cookie的,而第二个是在cookie中存储刷新令牌的。关键是要了解OAuth消息工作流的外观。对于SPA和API,我的这篇文章可能有助于您阐明所需的内容:https://authguidance.com/2017/09/26/basicspa-oauthworkflow/ 很高兴回答任何后续问题..
答案 1 :(得分:0)
您可以使用隐式授权与 SPA 一起使用 https://discord.com/developers/docs/topics/oauth2#implicit-grant