ValidationError: "tenantId" is not allowed when using AzureAD for hapi JS route authorization

ValidationError: "tenantId" is not allowed when using AzureAD for hapi JS route authorization

我们正在尝试在后端路由上使用@hapi/bell 来提供授权。身份验证策略使用 azure 作为提供者,方案为 bell

这是我注册策略的方式。 clientIdclientSecrettenantIdpassword 由于显而易见的原因被隐藏

server.auth.strategy('azureAD', 'bell', { provider: 'azure', clientId: '...', clientSecret: '...', tenantId: '...', password: '...', providerParams: { response_type: 'code' }, scope: ['openid', 'offline_access', 'profile', 'User.Read'] })

当我 运行 服务器时,出现以下错误:

{ [ValidationError: "tenantId" is not allowed] ...

现在,看看 Azure 门户,我们绝对希望只支持组织内部的帐户,即单租户。

如果我删除 tenantId 选项并重新启动服务器,我会收到 CORS 错误,这实际上表明我们的应用程序未配置为多租户应用程序,我们需要使用特定于租户的端点或配置应用程序是多租户的。但是,添加 tenantId 表示不允许。

任何关于为什么会发生这种情况的指导将不胜感激。

我发现可以执行以下操作,而不是像我在问题中显示的那样注册策略:

const custom = Bell.providers.azure({ tenant: '...' })

server.auth.strategy('azureAD', 'bell', {
  provider: custom,
  clientId: '...',
  clientSecret: '...',
  password: '...',
  isSecure: false, // look into this, not a good idea but required if not using HTTPS
  providerParams: {
    response_type: 'code'
  },
  scope: ['openid', 'offline_access', 'profile', 'User.Read']
})

这消除了 "tenantId" is not allowed 错误,但是,我们现在得到一个不同的错误,指出 Authentication failed due to: Missing custom request token cookie

Bell 建议一个常见的解决方案是将 bell 与 hapi-auth-cookie 身份验证方案插件结合使用,所以现在需要研究一下。

Joi 包正在验证架构并抛出错误。请参阅下面的配置 属性。它会覆盖选项并避免出现 "tenantId" or "tenant" is not allowed 错误。此外,在最近的版本中,Bell Azure Provider 希望 "tenant" 而不是 "tenantId" 属性.

server.auth.strategy('azureAD', 'bell', {
  provider: 'azure',
  config: {
    tenant: '...',
    useParamsAuth: false,
  },
  clientId: '...',
  clientSecret: '...',
  password: '...',
  providerParams: {
    response_type: 'code'
  },
  scope: ['openid', 'offline_access', 'profile', 'User.Read'],
  isSecure: false,
})