如何解决用于社交登录的身份验证库 提供商信息
我正在尝试向我的网络应用添加身份验证。
理想的流程是受保护的页面只能由拥有特定电子邮件地址的人访问。他们可以使用任何社交登录(Google、LinkedIn 等)来证明自己的身份
我只需要从这些平台获取用户的电子邮件地址。我不是为每个提供者自己构建它,而是寻找一个 npm 包或类似的包来做到这一点。
我遇到了 auth0,但是
我很高兴为每个平台生成我自己的客户端 ID 和机密,并将它们插入到配置文件中。
我也不需要为验证显示我的品牌,我很乐意在身份验证屏幕上使用第 3 方名称(只要他们是众所周知的)。
这是一个要求,将 oauth 范围限制为仅读取用户的个人资料信息,而不是其他任何内容。
我有哪些选择?
解决方法
如果您愿意建立一个专门的安全应用程序来处理所有社交媒体,您可以考虑开放自由服务器,它可以处理任何基于 oauth 2.0 或 OIDC 的社交媒体的身份验证。 https://openliberty.io/guides/social-media-login.html
,与上述解决方案不同,它没有列出所有社交登录的库。
但是,简单的答案是护照。
编辑:以下链接无效,请使用 https://www.passportjs.org
https://passportjs.org/ https://passportjs.org/packages/
支持 discord、google、twitter、facebook 等 500 多个
搜索它http://www.passportjs.org/packages/
如果这解决了您的问题,请接受我的回答。 谢谢:)
(如果这对您没有帮助,请发表评论,我会修复它)
编辑:npm install passport
document.getElementById('bye').onclick = function(){
location.replace("google.com/search?q=" + document.getElementById("bye").value)
}
<input id='hi' placeholder="Goole search">
<button id='bye'>Submit</button>
最好的免费解决方案是使用 firebase 身份验证。只需创建一个项目并为您喜欢的任何平台(例如 google、facebook、github 等)启用身份验证。
https://firebase.google.com/docs/auth/web/start
,OAuth2
大多数网络服务通过 OAuth2 支持社交登录,这是一种标准化的授权协议。它本身非常广泛,但对于您的用例,您只需要知道客户端如何与服务器交互。在本例中,我们查看的是 authorization code grant type。
您可以使用来自 npm 的标准 oauth 库,例如 oauth
,并为您想要手动支持的每个提供程序配置值。这是一个 example of OAuthenticator
,它是一个 Python 库。该页面显示了如何设置身份验证器类以及感兴趣的属性。
例如,对于作为身份提供商的 AWS Cognito,没有实现任何自定义类来处理奇特的逻辑。这几乎都是相同的原则,但价值不同。您可以使用正确的参数配置通用身份验证器以执行您想要的操作。
提供商信息
因此对于每个提供商(Google、Github、Discord 等),您需要了解
- 第一个请求的
authorization_url
- 第二个请求的
token_url
- 一组您可以查询的
scopes
- 给定访问令牌的
userinfo_url
端点,您可以调用该端点以获取当前用户的更多信息 - 一种从从
email
获得的响应中提取资源(例如userinfo_url
)的方法
您通常可以在相应提供商的文档页面中找到所有这些值。
申请信息
然后,您的应用程序需要具有
- 用于标识您的应用程序的
client_id
- 应该保密的
client_secret
- 您想要查询的一组
scopes
(例如用于访问电子邮件地址的电子邮件、用于访问名字和姓氏的个人资料) - 身份提供者将向其发送 POST 请求的
redirect_uri
,传达您的应用可以交换访问令牌的code
,前提是您了解client_secret
立>
这些值由您作为应用程序的开发者设置。您从提供商处获取 client_id
和 client_secret
,redirect_uri
应指向您应用的后端。
OpenID 连接
最后,虽然使用 OAuth2 对授权进行了标准化,但之后如何提取信息还不是(还)。所以你现在有一个访问令牌 - 好的,现在怎么办?如何获取用户的资源(如email
、profile_image
等)不清楚,依赖于提供者。
为此,有一个名为 OpenID Connect (OIDC) 的协议,它标准化了如何获取用户信息。许多 OAuth2 提供商也支持 OIDC 并为您提供 userinfo endpoint
、ID 令牌等。
示例:不和谐
有关具体示例,请查看 OAuth2 guide from Discord,它为您提供了一些有关如何自己实现事物的有用指示(例如,使用 axios
或任何其他 HTTP 库)。在 Discord 的情况下,授权用户的典型工作流程是
- 您的应用将用户重定向到 Discord 的
authorization_url
- 用户登录 Discord 并同意
- Discord 向您在 discord 注册 OAuth 客户端时设置的
redirect_uri
发送 POST 请求。在请求正文中,您将找到授权code
- 您的后端将代码交换为访问令牌。为此,它使用
token_url
、client_id
和client_secret
(以及一些附加信息)调用code
- Discord 使用您存储在某处的访问令牌进行响应
- 对于每个后续请求,您都可以访问用户的资源(例如电子邮件、个人资料图片等)。您可以通过在请求中提供
Authorization: Bearer <token>
标头来向 Discord 发出信号 - 一个示例:通过调用 Discord's
userinfo_url
查找用户的电子邮件地址。您可以从响应中提取email
属性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。