Entra作为IdP时,oidc-connect中使用JWT声明替代Userinfo

我看看是不是有什么我遗漏的地方。我知道 download_avatar_url 基于 userinfo/picture 属性会失败,因为该调用不包含访问令牌(对于 Entra,这是 graph/me 端点)。在 importer 中添加身份验证逻辑感觉会是一团糟的条件判断,而且很脆弱。

我有一个匿名的头像端点,可以使用(已通过外部 URL 和基于用户名的替换进行测试)。

通常,我会通过 Entra 中的可选声明来处理这类事情,应用程序会在其一侧将这些声明映射到正确的字段。我可以成功做到这一点,并在详细的 OIDC 日志中看到带有声明的格式正确的 JWT。但是默认流程是使用 access_token 来获取 userinfo,这是我无法添加/修改的,其余的声明都会被丢弃。

我确实注意到,如果 userinfo_endpoint 未定义,它将使用 JWT 中的声明。现在的问题是,这是由 discovery doc 的内容触发的,而 discovery doc 是 .wellknown 的一部分,我无法对其进行调整。 hack Ruby 代码使其始终使用 JWT 是一种笨拙的方法。我们甚至考虑过制作一个 discovery doc 的“分支”,并在我们的部署中从公共部分提供服务,但这同样很笨拙。

我是否只是遗漏了某种设置变量(或整理它们)的机制,而不是去修改 discovery doc?我不介意复制它们而不是使用 discovery,但看不到在不修补代码的情况下做到这一点的方法。