passport-azure-ad:为什么我得到 "jwt audience is invalid"?
passport-azure-ad: Why am I getting "jwt audience is invalid"?
(下面例子中的所有ID都是编造的。我添加它们是为了说明一些参数的格式)。
我的租户在 acme.co.uk,但我希望我在 https://subdomain.acme2.co.uk 部署的 Web 应用程序将用户身份验证委托给 Azure AD。
我使用 new portal 如下注册了我的应用程序:
(字段名称是在 Azure 门户上使用的名称)。
应用程序 ID URL:https://acme.co.uk/11111111-2222-3333-4444-555555555555
首页URL:https://subdomain.acme2.co.uk/api/auth/aad
回复URLs:https://subdomain.acme2.co.uk/api/auth/aad/callback
并创建了一个不会过期的密钥,其值为:'111111111111111111/aaaaaaaaaaaaaaaaaaaaaaaa='
我一直在遵循 passport-azure-ad github sample using v1 endpoint 作为指南。
{
allowHttpForRedirectUrl: false,
clientID: 'https://acme.co.uk/11111111-2222-3333-4444-555555555555',
clientSecret: '111111111111111111/aaaaaaaaaaaaaaaaaaaaaaaa=',
identityMetadata: 'https://login.microsoftonline.com/acme.co.uk/.well-known/openid-configuration',
isB2C: false,
issuer: null,
loggingLevel: 'info',
passReqToCallback: false,
redirectUrl: 'https://subdomain.acme2.co.uk/api/auth/aad/callback',
responseMode: 'form_post',
responseType: 'code id_token',
skipUserProfile: true,
useCookieInsteadOfSession: false,
validateIssuer: true
}
当我在浏览器中到达“https://subdomain.acme2.co.uk/api/auth/aad”时,我被重定向到 MS 进行登录,然后我这样做了,但是当重定向回“https://subdomain.acme2.co.uk/api/auth/aad/callback”时,我未通过身份验证。
从回调 POST 请求中检查 headers 我看到:
In _validateResponse: jwt audience is invalid. expected: https://acme.co.uk/11111111-2222-3333-4444-555555555555,spn:https://acme.co.uk/11111111-2222-3333-4444-555555555555
知道我做错了什么吗??? [:-|
(旁白:调试这个很痛苦,因为我在 docker 中 运行 并且重定向似乎无法正常工作,所以我必须部署到真实环境 ATM ).
好的找到了...
clientID: 'https://acme.co.uk/11111111-2222-3333-4444-555555555555'
是罪魁祸首。
那应该是应用程序 ID,而不是应用程序 ID URI。呵呵。非常感谢@Alex Blex 的指导。这是最有帮助的。
在我的实例中,我使用的是 .env 并从那里获取 clientId。
我通过删除配置和 .env 文件中 clientID 周围的引号解决了这个问题。
(下面例子中的所有ID都是编造的。我添加它们是为了说明一些参数的格式)。
我的租户在 acme.co.uk,但我希望我在 https://subdomain.acme2.co.uk 部署的 Web 应用程序将用户身份验证委托给 Azure AD。
我使用 new portal 如下注册了我的应用程序: (字段名称是在 Azure 门户上使用的名称)。
应用程序 ID URL:https://acme.co.uk/11111111-2222-3333-4444-555555555555
首页URL:https://subdomain.acme2.co.uk/api/auth/aad
回复URLs:https://subdomain.acme2.co.uk/api/auth/aad/callback
并创建了一个不会过期的密钥,其值为:'111111111111111111/aaaaaaaaaaaaaaaaaaaaaaaa='
我一直在遵循 passport-azure-ad github sample using v1 endpoint 作为指南。
{
allowHttpForRedirectUrl: false,
clientID: 'https://acme.co.uk/11111111-2222-3333-4444-555555555555',
clientSecret: '111111111111111111/aaaaaaaaaaaaaaaaaaaaaaaa=',
identityMetadata: 'https://login.microsoftonline.com/acme.co.uk/.well-known/openid-configuration',
isB2C: false,
issuer: null,
loggingLevel: 'info',
passReqToCallback: false,
redirectUrl: 'https://subdomain.acme2.co.uk/api/auth/aad/callback',
responseMode: 'form_post',
responseType: 'code id_token',
skipUserProfile: true,
useCookieInsteadOfSession: false,
validateIssuer: true
}
当我在浏览器中到达“https://subdomain.acme2.co.uk/api/auth/aad”时,我被重定向到 MS 进行登录,然后我这样做了,但是当重定向回“https://subdomain.acme2.co.uk/api/auth/aad/callback”时,我未通过身份验证。
从回调 POST 请求中检查 headers 我看到:
In _validateResponse: jwt audience is invalid. expected: https://acme.co.uk/11111111-2222-3333-4444-555555555555,spn:https://acme.co.uk/11111111-2222-3333-4444-555555555555
知道我做错了什么吗??? [:-|
(旁白:调试这个很痛苦,因为我在 docker 中 运行 并且重定向似乎无法正常工作,所以我必须部署到真实环境 ATM ).
好的找到了... clientID: 'https://acme.co.uk/11111111-2222-3333-4444-555555555555' 是罪魁祸首。
那应该是应用程序 ID,而不是应用程序 ID URI。呵呵。非常感谢@Alex Blex 的指导。这是最有帮助的。
在我的实例中,我使用的是 .env 并从那里获取 clientId。
我通过删除配置和 .env 文件中 clientID 周围的引号解决了这个问题。