繁体   English   中英

passport-azure-ad因错误的KID而无法验证`id_token`

[英]passport-azure-ad unable to validate `id_token` due to wrong KID

我在使用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"

我可以看到id_token标题中的kid是一个没有出现在密钥发现端点的值(格式为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的密钥

所以,事实证明我在Azure Active Directory中创建了一个v1应用程序,虽然这在任何地方都不清楚, id_token说它是ver: 2.0但它不是....

如果您希望Azure AD中的v2.0应用程序无法从“ 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应用程序的唯一方式!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM