【问题标题】:Authenticating to Azure AD non-interactively以非交互方式向 Azure AD 进行身份验证
【发布时间】:2021-08-18 05:54:18
【问题描述】:

我有一个 asp.net 应用程序,我试图在其中集成 AD 身份验证,而不将用户重定向到 https://login.microsoftonline.com。我使用以下代码并根据最新文档进行了一些修改,但出现如下错误

Microsoft.IdentityModel.Clients.ActiveDirectory.AdalException: 'unknown_user_type: Unknown User Type'

这是我写的代码

var tenant = System.Configuration.ConfigurationManager.AppSettings["Tenant"];
var serviceUri = "https://login.microsoftonline.com/4061611f-98d4-4484-944c-3796d4c9746f/oauth2/authorize";
var clientID = System.Configuration.ConfigurationManager.AppSettings["ClientId"];
var userName = "";
var password = "";
var authority = string.Format(System.Globalization.CultureInfo.InvariantCulture, System.Configuration.ConfigurationManager.AppSettings["Authority"], tenant);
var authContext = new AuthenticationContext(authority);
 var credentials = new UserPasswordCredential(userName, password);
 var authResult = await authContext.AcquireTokenAsync(serviceUri, clientID, credentials);

租户和应用程序ID的设置如下

我错过了什么可以帮助我吗?

【问题讨论】:

  • 你想使用什么样的用户?是个人 Microsoft 帐户/Azure AD 帐户/Guest Azure AD 帐户/本地 AD 帐户吗?
  • 我使用自己的 Microsoft 帐户,在 AD 中创建了几个用户

标签: asp.net azure-active-directory


【解决方案1】:

不确定为什么错误显示“未知用户类型”,但我很确定这不起作用,因为您正尝试通过个人 Microsoft 帐户使用 ROPC 流。

资源所有者密码凭证 (ROPC) 流程在以下情况下不起作用:

  • 用户是个人 Microsoft 帐户
  • 用户启用了 MFA
  • 用户密码已过期

如果我没记错的话,它也不适用于访客帐户。

一般来说,我建议避免使用这种身份验证方法,而是将用户重定向到 Azure AD 登录页面。 无法使用多重身份验证通常是避免此流程的一个重要原因。

我也很确定您的serviceUri 是错误的。 该参数应定义您希望为其提供令牌的 API,而不是 Azure AD 授权页面的 URL。

【讨论】:

  • 嗨,juunas 是的,当我将代码重定向到 Azure AD 登录页面时,代码工作正常,我也获得了所需的令牌。但是我没有重定向到广告登录页面,而是尝试通过传递用户名和密码来实现它
  • 不使用Azure AD登录页面的原因是什么?
  • 没有具体原因只是尝试一下,因此需要额外的重定向
  • 好的,但该方法不适用于您的个人 Microsoft 帐户 + 我提到的其他情况。
猜你喜欢
  • 1970-01-01
  • 2019-09-05
  • 2018-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 2021-09-16
相关资源
最近更新 更多