gpt4 book ai didi

c# - Azure AD AcquireToken 不适用于应用程序密码

转载 作者:行者123 更新时间:2023-11-30 12:26:18 24 4
gpt4 key购买 nike

我正在尝试使用 .NET ADAL 库验证 Azure AD 中的用户密码。这对于没有 MFA 的常规用户帐户来说效果很好,但对于激活了 MFA 的用户执行此操作时遇到了问题。

当使用用户的实际密码时,我收到AADSTS50076:需要应用程序密码。,这很公平,但是当我创建新的应用程序密码时,我收到错误AADSTS70002 :验证凭据时出错。 AADSTS50020:用户名或密码无效。我创建了多个应用程序密码,但它们都不起作用。

用于尝试身份验证的代码如下:

var ac = new AuthenticationContext("https://login.windows.net/my-tenant.com");
var authResult = ac.AcquireToken("https://graph.windows.net", "my-client-id", new UserCredential("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a8c5d186c9cbcbc7ddc6dce8c5d185dccdc6c9c6dc86cbc7c5" rel="noreferrer noopener nofollow">[email protected]</a>", "my-password"));

尝试进行身份验证的用户是此 AD 中的全局管理员。

是否可以对具有 MFA 的用户进行这样的身份验证?

最佳答案

因此,为了回答我自己的问题,我采取了以下操作(为了简洁而进行了清理):

public class AzureAdAuthenticationProvider
{
private const string AppPasswordRequiredErrorCode = "50076";
private const string AuthorityFormatString = "https://login.windows.net/{0}";
private const string GraphResource = "https://graph.windows.net";

private AuthenticationContext _authContext;
private string _clientId;

public AzureAdAuthenticationProvider()
{
var tenantId = "..."; // Get from configuration

_authContext = new AuthenticationContext(string.Format(AuthorityFormatString, tenantId));
}

public bool Authenticate(string user, string pass)
{
try
{
_authContext.AcquireToken(GraphResource, _clientId, new UserCredential(user, pass));

return true;
}
catch (AdalServiceException ase)
{
return ase.ServiceErrorCodes.All(sec => sec == AppPasswordRequiredErrorCode);
}
catch (Exception)
{
return false; // Probably needs proper handling
}
}
}

它并不漂亮,但它可以完成工作。

通过使用 ServiceErrorCodes.All(),我确保仅当发生单个 AppPasswordRequired 错误时,身份验证才会成功。

此方法的唯一缺点是启用了 MFA 的用户必须使用其实际帐户密码才能登录。似乎不支持使用应用程序密码。

关于c# - Azure AD AcquireToken 不适用于应用程序密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29366984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com