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 周围的引号解决了这个问题。