JWT::InvalidIssuerError при декодировании JWT (OpenID Connect)

Привет :wave:! Добрый день, у меня вопрос по плагину OpenID Connect.

Я пытаюсь использовать ID Uruguay (государственного провайдера OpenID Connect) с Discourse. Я зарегистрировался на тестовом сервере, и они предоставили мне необходимые данные.

Весь процесс, кажется, работает корректно, за исключением обратного вызова: похоже, что поле Issuer, переданное в JWT, не совпадает с данными в документе обнаружения (discovery document).
Я уже связался со службой поддержки, и они сказали, что ошибка, по сути, находится на стороне Discourse (что, на мой взгляд, неверно).

Возможно ли каким-то образом добавить другое значение в параметр «ожидаемый издатель» (expected issuer)?

Документ обнаружения: 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:

Хм.

Исходя из расположения документа обнаружения, необходимо исходить из того, что издателем является https://auth-testing.iduruguay.gub.uy/oidc/v1, поскольку документ обнаружения представляет собой URL издателя с добавленным в конец /.well-known/openid-configuration.

Теперь сам документ указывает: issuer "https://auth-testing.iduruguay.gub.uy".

Далее у нас есть документ обнаружения OpenID Connect, в котором говорится:

Оба требования в последнем предложении не выполнены. Значение утверждения iss идентично URL издателя, использованному для получения конфигурации, но ни одно из них НЕ идентично возвращённому значению issuer.

Так что, насколько я понимаю, они ошибаются, а вы правы. Жаль, что это не поможет вам продвинуться в решении проблемы.

Интересный факт, я не знал :thinking:

Я сообщил об этом и привязал ссылку к вашему ответу, буду ждать ответа от поддержки ID Uruguay :sleeping:.

Сейчас я использую pastebin с правильным издателем (в любом случае, это было для тестирования), и всё, кажется, работает корректно. Надеюсь, что команда поддержки сможет решить эту деталь до перехода в режим Production для ID Uruguay.

Удивительно, что это действительно работает :slight_smile:, поскольку в спецификации сказано:

Что ж, я получил ответ, и они просто не собираются это исправлять, потому что «с их стороны проблем нет, и это широко используется» :slight_smile:

В документации я не вижу ничего о проверке JWT, поэтому, вероятно, именно поэтому это «просто работает» :thinking:

Документация (Google Translate):
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


Я создал «прокси» для документа обнаружения, который изменяет возвращённый издатель, и это тоже «просто работает». Я сообщил об этом, и они приняли моё решение :slight_smile:

Мне кажется, что в будущем это перестанет работать, так как не соответствует спецификациям, но пока всё в порядке.

Спасибо Ричарду за то, что нашёл время помочь! :hugs: