JWT claims em vez de Userinfo em oidc-connect com Entra como IdP

Vendo se há algo que eu tenha perdido. Sei que download_avatar_url com base no atributo userinfo/picture falhará, pois o token de acesso não está incluído nessa chamada (para o Entra, este é o endpoint graph/me). Adicionar lógica de autenticação ao importador parece que seria uma bagunça de condicionais e seria frágil.

Eu tenho um endpoint de avatar que é anônimo e pode funcionar (testado usando URL externa e substituição baseada em nome de usuário).

Normalmente, eu lidaria com esse tipo de coisa com declarações opcionais no Entra e o aplicativo mapearia essas declarações para os campos corretos do lado dele. Posso fazer isso com sucesso e ver o JWT formatado corretamente com as declarações no log OIDC detalhado. Mas o fluxo padrão é que o access_token é usado para obter informações do usuário, o que não é algo que eu possa adicionar/modificar, e o restante das declarações é descartado.

Notei que se o userinfo_endpoint estiver indefinido, ele usará as declarações do JWT. O problema agora é que isso é acionado pelo conteúdo do documento de descoberta, que não é algo que eu possa ajustar, pois faz parte do .wellknown. Hackear o ruby para sempre usar JWT é uma gambiarra. Estávamos até pensando em fazer um “fork” do documento de descoberta e servi-lo publicamente em nosso deploy, mas novamente, é uma gambiarra.

Estou apenas perdendo algum mecanismo para definir as variáveis (ou curá-las) em vez de mexer no documento de descoberta? Não me importo de duplicá-las em vez de usar a descoberta, mas não consigo ver uma maneira de fazer isso sem modificar o código.