如何使用不透明的访问令牌处理多个 IDP

How to handle multiple IDP with opaque access tokens

我目前正在编写一个社交媒体后端服务器,它应该可以处理很多用户。 作为身份验证机制,我们希望使用 Google 和 Apple 的 OIDC 身份验证(使用 Apple 登录)。

现在,当我们得到一个不透明的访问令牌时,我真的无法想象一种高效的方式来授权不透明的访问令牌,因为我们无法解码令牌(不是 jwt 令牌)并且我们不知道颁发者。

我的想法:

  1. 依次对访问令牌进行授权。含义:

这是低效的,因为处理时间越来越长,当我们添加更多 IDP 时

  1. 将颁发者保存在数据库中,并始终在身份验证步骤中获取用户的颁发者,然后再获取 /userinfo 端点

这样性能更高,但感觉不对,因为网络服务器必须进行数据库调用 + HTTP 调用才能授权来自客户端的请求。

我是否缺少以高效方式获取此信息的方法?

顺便说一句:网络服务器是一个 node.js 应用程序,使用 express.js

非常感谢您的指教!

这里的关键点是 foreign access tokens 不是为您自己的后端授权而设计的。相反,您需要在登录完成时颁发自己的令牌。

授权服务器 (AS)

最标准的解决方案是让您的应用与您拥有的 AS 通信,并由它为您管理社交登录。然后 AS 将发行您可以完全自定义的令牌。

这将使您能够完全控制范围和声明您的后端用于授权的范围,以及 UI 中的会话时间。无论用户选择何种登录方法,您的后端都只能使用 AS 颁发的访问令牌。

当您需要添加新的登录方法时,您只需更改 AS 配置,而无需更改应用中的任何代码。一个好的 AS 将支持与许多系统集成,如 this summary page.

所示。