passport-azure-ad не может проверить `id_token` из-за неправильного KID - PullRequest
2 голосов
/ 02 апреля 2019

Я сталкиваюсь с проблемой при использовании библиотеки passport-azure-ad, когда библиотека выдает ошибку при попытке проверить id_token.Конкретное сообщение об ошибке: "authentication failed due to: In _validateResponse: failed to generate PEM key due to: a key with kid %s cannot be found"

Я вижу, что kid в заголовке id_token - это значение, которое не отображается в конечной точке обнаружения ключей (в формате https://login.microsoftonline.com/{tenantId}/discovery/v2.0/keys)..

Есть ли причина, по которой это может произойти?Я не могу понять это.

Мой код следующий:

passport.use(
  new OIDCStrategy({
    clientID: CLIENT_ID,
    clientSecret: CLIENT_SECRET,
    identityMetadata: IDENTITY_METADATA_URL,
    redirectUrl: SUCCESS_REDIRECT_URI,
    responseMode: 'form_post',
    responseType: 'code',
    scope: 'email profile',

    loggingLevel: 'info',
    loggingNoPII: false
  })
)

app.get(
  '/oauthv2/login',
  passport.authenticate(
    'azuread-openidconnect',
    { failureRedirect: '/fail' },
    (req, res) => {
      // ...
    }
  )
)

app.post(
  '/oauthv2/success',
  passport.authenticate(
    'azuread-openidconnect',
    { failureRedirect: '/' },
    (req, res) => {
      // ...
    }
  )
)

Из журналов pazzport-azure-ad я вижу, что до возникновения ошибки выполняются следующие шаги:

  • получено id_token
  • получено access_token
  • получено refresh_token
  • декодированный токен
  • работает с ключом
  • работа с ключом
  • работа с ключом
  • проверка подлинности не удалась из-за: В _validateResponse: не удалось сгенерировать ключ PEM из-за: ключ с ребенком% s не найден

1 Ответ

0 голосов
/ 04 апреля 2019

Итак, получается, что я создал приложение v1 в Azure Active Directory, хотя это было непонятно ВСЕГДА, и id_token сказал, что это ver: 2.0, но это не так ...

Если вам нужно приложение v2.0 в Azure AD, вы не можете создать его из раздела Enterprise Applications, вам нужно использовать раздел App registrations (Preview).

Это решило мою проблему, и id_token содержалдействительный KID после того, как я удалил свое приложение и воссоздал его правильно.

Надеюсь, это поможет любому, кто столкнулся с той же проблемой!

Полезная ссылка: https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app

Если кто-то из Azure читает это, пожалуйста, знайте, что добавление (Preview) в заголовок любого раздела означает, что я автоматически не нажму на него, потому что это выглядит какэто не что-то важное.Однако в этом случае это был ЕДИНСТВЕННЫЙ способ создания приложения v2.0!

...