![](/img/trans.png)
[英]How to generate privatePEMKey & thumbprint for passport-azure-ad
[英]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
日志中我可以看到在错误发生之前执行了以下步骤:
所以,事实证明我在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.