authentication - 是否有一种经济高效的方式来协调多个登录流程,主要是 OAuth2?
问题描述
我想允许我的应用程序的用户使用各种 OAuth 提供商(Facebook、Google、Github 等)登录。我的应用实际上不需要访问任何人的 API;我只是为了方便而提供这些登录名。
我的客户端(本机应用程序)执行隐式授权流程并返回一些内容,并将其发送到我的 API。在提供对我自己的资源的访问之前,我如何验证这些东西?
我说“东西”是因为,对于谷歌来说,它实际上id_token
是我可以验证的(使用谷歌的公钥)。但似乎在一般情况下,我需要使用访问令牌并通过实际向提供商资源服务器上的某个端点发出 API 请求来验证它。显然,这意味着我必须分别处理每个不同的 OAuth 提供者。
像Okta和Auth0这样的身份即服务提供商通过协调所有不同的身份提供商和方法来简化这一过程。不幸的是,这些对于几千名用户来说变得非常昂贵(至少,在公共定价页面上)。
问题:
- 以这种方式使用 OAuth 是否不标准,纯粹作为一种身份验证机制而不实际调用任何 API?我是否错过了一些明显更好的方法来做到这一点?
- 是否有库可以标准化所有这些不同的 OAuth 流程,有点类似于 Okta 或 Auth0,但没有订阅成本?(并希望为用户名/密码登录流程提供一些支持,包括密码重置?)
解决方案
一种选择是使用IdentityServer,它可以对您正在寻找的不同提供者进行协调。
理想情况下,您应该只支持系统内的一组令牌以避免不必要的复杂性。但是,在本地运行您自己的 IdentityProvider 也需要一些知识和管理它。
推荐阅读
- architecture - 在 DDD 的上下文中应该如何处理事件订阅和分发
- php - 如何使用 json laravel 的单个键获取多个值?
- javascript - 在调整浏览器窗口大小时按住背景图像
- c# - Asp.Net Core Razor 页面,无法从其他视图/剃须刀模型访问会话变量
- php - 无法在 slim rest api 中启用 cors
- javascript - 如何保护主 API 密钥?
- c# - 如何错误处理 Selenium 无法单击元素,因为其他元素在 C# 中遮挡了它?
- algorithm - 时间复杂度n^k,k是数值变量,这个是伪多项式吗?
- java - 使用 rxjava 检测文件文本更改
- c# - Unity Raycast() 和 DrawRay() 使用相同的输入创建不同的光线