对于外部用户(来宾用户),Azure AD 多租户提供商的 Next-Auth 身份验证失败

Dib*_*aha 0 azure-active-directory next.js azure-authentication next-auth

我想将 Azure (Microsoft) 身份验证与 Google 作为提供商一起添加到我的应用程序中,以避免电子邮件和密码注册和签名。

Google 登录工作正常,没有任何问题,而对于 Microsoft 来说,它无法工作,因为我收到以下错误:

AADSTS50020: User account 'xxxx@hotmail.com' from identity provider 'live.com' does not exist in tenant 'Default Directory' and cannot access the application 'f42685g2-3150-3t37-u4y2-392a0ec2775'(next-auth-dev) in that tenant.

我通过选择 as 在 Azure AD 中创建了多租户应用程序Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)

我还提供了“http://localhost:3000/api/auth/callback/azure-ad”作为“Web Platform”的重定向 URI。

我已经完成了 Next-Auth.js“https://next-auth.js.org/providers/azure-ad”文档中提到的所有操作

它只能验证帐户所有者的身份,但除此之外任何外部用户都无法完成此过程。

经过搜索,我发现用户需要在 Azure AD 应用程序中添加为“来宾用户”,但这不是本意,任何随机用户都可以访问我的应用程序并通过“Microsoft (Azure AD)”身份验证进行身份验证。

如果我遗漏了什么或者我的理解不正确,有人可以帮忙吗?

Ruk*_*ini 5

创建Azure AD 多租户应用程序:

在此输入图像描述

例如,我使用以下端点来授权用户

https://login.microsoftonline.com/TenantID/oauth2/v2.0/authorize?
&client_id=ClientID
&response_type=code
&redirect_uri=https://jwt.ms
&response_mode=query
&scope=https://graph.microsoft.com/user.read 
&state=12345
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试对外部用户进行身份验证时,出现了相同的错误

在此输入图像描述

TenantID如果您在授权用户时通过,通常会发生该错误。

要解决该错误,请确保传递common授权端点。

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
&client_id=ClientID
&response_type=code
&redirect_uri=https://jwt.ms
&response_mode=query
&scope=https://graph.microsoft.com/user.read 
&state=12345
Run Code Online (Sandbox Code Playgroud)

通过传递common授权端点,外部用户身份验证成功:

在此输入图像描述

外部用户重定向到页面:

在此输入图像描述

修改您的代码如下:

AZURE_AD_CLIENT_ID=ClientID 
AZURE_AD_CLIENT_SECRET=ClientSecret 
AZURE_AD_TENANT_ID=common
Run Code Online (Sandbox Code Playgroud)

参考:

错误 AADSTS50020 - 租户中不存在来自身份提供商的用户帐户 - Active Directory

AADSTS50020:租户中不存在用户帐户 - Thinbug