JWT::InvalidIssuerError ao decodificar JWT (OpenID Connect)

Olá :wave:! Boa tarde, tenho uma pergunta sobre o plugin OpenID Connect

Estou tentando usar o ID Uruguay (um provedor governamental OpenID Connect) com o Discourse, me inscrevi no servidor de teste e eles me enviaram os dados necessários.

Todo o fluxo parece funcionar bem, exceto pelo callback, aparentemente o Issuer enviado no JWT não é o mesmo do documento de descoberta.
Já entrei em contato com o Suporte e eles disseram que basicamente o erro era do Discourse (o que eu não acho).

É possível adicionar de alguma forma outro valor a “issuer esperado”?

Documento de descoberta: https://auth-testing.iduruguay.gub.uy/oidc/v1/.well-known/openid-configuration

Logs
OIDC Log: JWT carregado

---
iss: https://auth-testing.iduruguay.gub.uy/oidc/v1
sub: '7630'
aud: '862271'
exp: 1656363519
iat: 1656362919
auth_time: 1656362918
amr:
- urn:iduruguay:am:password
acr: urn:iduruguay:nid:1
nonce: 94d556d732db0db8dff0e09a174c27f2943cfe1740845abf537ff768e96c8ddf
at_hash: eokMw_xDlqb6cXB-DkDA_A
pais_documento:
  codigo: uy
  nombre: Uruguay
tipo_documento:
  codigo: 68909
  nombre: C.I.
numero_documento: '54682086'
email: alexander.barrios@estudiante.ceibal.edu.uy
email_verified: true
name: Yanquis Alexander Barrios Espíndola
given_name: Yanquis Alexander
family_name: Barrios Espíndola
nickname: uy-ci-54682086
idp: Usuario gub.uy

(oidc) Falha na autenticação! jwt_decode_failed: JWT::InvalidIssuerError, Issuer inválido. Esperado ["https://auth-testing.iduruguay.gub.uy"], recebido https://auth-testing.iduruguay.gub.uy/oidc/v1


Desde já, muito obrigado! :hugs:

Hmm.

Pela localização do documento de descoberta, você precisa assumir que o emissor é https://auth-testing.iduruguay.gub.uy/oidc/v1, já que o documento de descoberta é o emissor com /.well-known/openid-configuration anexado a ele.

Agora o próprio documento diz issuer\t\"https://auth-testing.iduruguay.gub.uy\"

E então temos o documento de Descoberta OpenID Connect que afirma

E os dois requisitos na última frase não são atendidos. O valor da reivindicação iss é idêntico à URL do Emissor que foi usada para recuperar a configuração, mas ambos NÃO são idênticos ao valor issuer retornado.

Portanto, pelo que vale, acho que eles estão errados e você está certo. Pena que isso não te leva a lugar nenhum.

3 curtidas

Fato interessante, eu não sabia :thinking:

Eu relatei isso e vinculei à sua resposta, aguardarei uma resposta do suporte do ID Uruguay :sleeping:.

No momento, estou usando um pastebin com o emissor correto (De qualquer forma, foi para testes) e tudo parece funcionar corretamente, espero que a equipe de suporte possa resolver este detalhe antes de aplicar o ID Uruguay em modo de produção.

2 curtidas

Estou surpreso que isso funcione :slight_smile: , já que a especificação diz

Bem, recebi uma resposta e eles simplesmente não vão consertar “porque não há problema do lado deles e é amplamente utilizado” :slight_smile:

Não vejo nada na documentação para verificar o JWT, então deve ser por isso que “simplesmente funciona” :thinking:

Documentação (Google Tradutor):
https://centroderecursos-agesic-gub-uy.translate.goog/web/seguridad/wiki/-/wiki/Main/ID+Uruguay+-+Integración+con+OpenID+Connect?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=es&_x_tr_pto=wapp


Criei um “proxy” para o documento de descoberta que modifica o emissor retornado, e ele também “simplesmente funciona”, relatei isso e eles aceitaram :slight_smile:

Sinto que no futuro isso falhará porque não segue as especificações, mas por enquanto está tudo bem.

Obrigado Richard por dedicar seu tempo para ajudar! :hugs:

2 curtidas

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.