有一个应用想要使用oAuth2对我的用户进行身份验证。
所以他们打开一个窗口,带有authorize
网址和参数(例如重定向uri)
赞:https://my-website.com/api/authLauncherauthorize?redirect=SOME_URI
现在我有自己的firebase-login,当用户登录时,我从firebase获取他们的访问令牌。这就是我想要回应的内容。
但是,在oAuth2指南/解释中,如https://aaronparecki.com/oauth-2-simplified/我看到我应该返回一个授权码,我不明白我从哪里可以得到它?
我可以做的是生成废话代码,将其在数据库中与访问令牌配对,然后在“令牌”请求中发送正确的访问令牌。那是我应该做的吗?
为了清楚起见,这是我第一次自己编写oAuth2服务。
答案 0 :(得分:3)
OAuth是一个提供对资源进行身份验证访问的系统。该资源可以是例如用户页面或对该用户页面的编辑权限。因此,您的目标是为合适的人提供访问权限。
当有人登录时,他们会获得一个令牌。你的部分是生成你想要的令牌,可能是某种形式的用户数据到base64或完全随机。获取此令牌并将其与权限相关联,例如查看页面,编辑页面甚至更简单的内容,例如查看用户的电子邮件。
OAuth2令牌和/或权限应该可以撤销而不删除用户。您不应该使用OAuth2来识别某人。
如果我正确理解你的问题:
答案 1 :(得分:1)
假设您是主机站点,给定一个想要连接第三方应用程序的用户,那么流程将是这样的:
用户登陆网站 - 点击登录Github
用户被重定向到他们登录的Github网站并点击“授权”
Github使用身份验证令将用户重定向回您的网站/authorize
。
您的站点然后将该令牌传递回第三方API(在本例中为github),以换取访问令牌和刷新令牌。
然后,您可以将该授权令牌传递给API端点以获取有关它的详细信息。如果令牌过期,您可以使用刷新令牌获取新的Auth令牌。两个令牌都应存储在您的数据库中供您的用户使用。
然而写下这一切我意识到你问的是如何生成授权令牌,所以我猜你实际上是这个例子中的第三方API。因此,您需要使用随机生成器生成授权令牌。由于您使用的是firebase,因此您可能需要尝试使用其令牌生成器:https://github.com/firebase/firebase-token-generator-node
我相信还有一些更新的信息:https://firebase.google.com/docs/auth/admin/#create_a_custom_token
就像你说的那样,你会将它存储在与用户关联的数据库中,然后当主机站点将该用户的身份验证令牌发送到您的服务器时,您将其交换为授权令牌(如果请求则刷新令牌)。
谷歌如何做也值得一读,因为你会做类似的事情:https://developers.google.com/identity/protocols/OAuth2UserAgent#validatetoken
JWT是生成令牌的另一种选择:https://jwt.io/