当前位置: 首页 > 编程语言 > C#

AzureADAcquireToken不适用于应用程序密码共享

时间:2023-04-10 23:35:15 C#

AzureADAcquireToken不适用于应用程序密码我正在尝试使用.NETADAL库对AzureAD中的用户密码进行身份验证。这适用于没有MFA的普通用户帐户,但对于激活了MFA的用户,我遇到了问题。使用用户的实际密码时,我得到AADSTS50076:需要应用程序密码。这很公平,但是当我创建新的应用程序密码时,我收到错误AADSTS70002:验证凭据时出错。AADSTS50020:用户名或密码无效AADSTS70002:验证凭据时出错。AADSTS50020:用户名或密码无效。我创建了多个应用程序密码,但没有一个有效。尝试身份验证的代码如下:varac=newAuthenticationContext("https://login.windows.net/my-tenant.com");varauthResult=ac.AcquireToken("https://graph.windows.net","my-client-id",newUserCredential("my.account@my-tenant.com","my-password"));尝试进行身份验证的用户是此AD中的全局管理员。是否可以为具有MFA的用户进行此类身份验证?因此,为了回答我自己的问题,我做了以下操作(为简洁起见进行了清理):publicclassAzureAdAuthenticationProvider{privateconststringAppPasswordRequiredErrorCode="50076";privateconststringAuthorityFormatString="https://login.windows.net/{0}";privateconststringGraphResource="https://graph.windows.net";私人AuthenticationContext_authContext;私有字符串_clientId;公共AzureAdAuthenticationProvider(){vartenantId="...";//从配置中获取_authContext=newAuthenticationContext(string.Format(AuthorityFormatString,tenantId));}publicboolAuthenticate(stringuser,stringpass){try{_authContext.AcquireToken(GraphResource,_clientId,newUserCredential(user,pass));返回真;}catch(AdalServiceExceptionase){returnase.ServiceErrorCodes.All(sec=>sec==AppPasswordRequiredErrorCode);}赶上(异常){返回假;//可能需要适当的处理}}}它不是很漂亮,但它完成了工作。通过使用ServiceErrorCodes.All(),我确保只有在出现单个AppPasswordRequired错误时身份验证才会成功。这种方法唯一的缺点是启用了MFA的用户必须使用他们的实际帐户密码才能登录。应用程序密码似乎不支持。以上是C#学习教程:AzureADAcquireToken不适用于应用密码共享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: