JWT 디코딩 시 JWT::InvalidIssuerError 발생 (OpenID Connect)

안녕하세요 :wave:! 오후 인사드립니다. OpenID Connect 플러그인에 대해 질문이 있습니다.

Discourse에서 ID Uruguay(정부의 OpenID Connect “제공자”)를 사용하려고 합니다. 테스트 서버에 가입했고, 필요한 데이터를 받았습니다.

콜백을 제외한 모든 흐름이 정상적으로 작동하는 것 같습니다. 그런데 JWT에 포함된 Issuer가 discovery 문서의 값과 일치하지 않는 것 같습니다.
이미 Support에 문의했는데, 기본적으로 오류가 Discourse 측에서 발생한다고 하더군요(저는 그렇게 생각하지 않습니다).

"excepted issuer"에 다른 값을 추가하는 방법이 있을까요?

Discovery 문서: https://auth-testing.iduruguay.gub.uy/oidc/v1/.well-known/openid-configuration

로그
OIDC Log: Loaded JWT

---
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) Authentication failure! jwt_decode_failed: JWT::InvalidIssuerError, Invalid issuer. Expected ["https://auth-testing.iduruguay.gub.uy"], received https://auth-testing.iduruguay.gub.uy/oidc/v1


미리 감사드립니다! :hugs:

음.

발견 문서(discovery document)의 위치를 보면, 발견 문서는 발급자(issuer)에 /.well-known/openid-configuration이 추가된 것이므로, 발급자는 https://auth-testing.iduruguay.gub.uy/oidc/v1이라고 가정해야 합니다.

그러나 문서 자체에는 issuer "https://auth-testing.iduruguay.gub.uy"라고 되어 있습니다.

그리고 OpenID Connect Discovery 문서에는 다음과 같이 명시되어 있습니다.

마지막 문장의 두 가지 요구사항은 충족되지 않았습니다. iss 클레임 값은 구성 정보를 가져오기 위해 사용된 발급자 URL과 동일하지만, 둘 다 반환된 issuer 값과는 동일하지 않습니다.

따라서 제 생각에는 상대방이 틀렸고, 여러분이 맞습니다. 하지만 안타깝게도 그것이 여러분에게 도움이 되지는 않습니다.

흥미로운 사실입니다. 저는 이 사실을 몰랐습니다 :thinking:

이 문제를 보고하고 답변을 링크했습니다. 이제 ID Uruguay 지원팀의 답변을 기다리겠습니다 :sleeping:.

현재는 정확한 issuer를 가진 pastebin(임의로 테스트용으로 사용했습니다)을 사용 중이며, 모든 것이 정상적으로 작동하는 것 같습니다. ID Uruguay를 프로덕션 모드로 신청하기 전에 지원팀이 이 세부 사항을 해결해 주기를 바랍니다.

사양(spec)에 따르면

라고 명시되어 있는데, 실제로는 동작한다니 놀랍습니다 :slight_smile:

음, 답변을 받았는데, "우리 쪽에는 문제가 없으며 널리 사용되고 있다"는 이유로 수정을 거부하더군요 :slight_smile:

JWT를 확인하는 방법에 대해 문서에서 아무것도 찾을 수 없으니, 아마도 그것이 “그냥 작동하는” 이유인 것 같습니다 :thinking:

문서 (Google 번역):
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


반환되는 issuer를 수정하는 discovery document용 "프록시"를 만들어 보았는데, 이것도 "그냥 작동"하더군요. 이 문제를 보고했더니 수용해 주었습니다 :slight_smile:

향후에는 사양을 따르지 않기 때문에 실패할 것 같지만, 지금은 문제없습니다.

도움을 주신 시간을 내어 주신 Richard님께 감사합니다! :hugs: