c# – Azure AD异常 – AADSTS50105 – “已登录的用户未分配给
我正在使用Azure AD为ASP.NET Web API 2 REST API设置身份验证.我希望所有客户都能够使用用户名和用户名.用于通过REST API进行身份验证的密码.我已经设置了Azure AD(下面的完整步骤,但实质上是 – 创建了一个目录,添加了一个用户,添加了一个应用程序,在清单中为应用程序添加了角色,为应用程序分配了用户).但是,当我尝试通过控制台应用程序(底部的完整代码)进行测试时,我得到了异常:
Microsoft.IdentityModel.Clients.ActiveDirectory.dll中发生未处理的“Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException”类型的异常异常 其他信息:AADSTS50105:已登录的用户’test@azureadwebapitest.onmicrosoft.com’未分配给应用程序’8ed6bbe9-dce7-4bed-83af-aa5472ac4eef’的角色. 我猜测需要在Manifest中调整一些东西,但我不知道. 这是代码: using Microsoft.IdentityModel.Clients.ActiveDirectory; using System; namespace WebApiClientTest { class Program { static void Main(string[] args) { const string authorityUri = "https://login.microsoftonline.com/azureadwebapitest.onmicrosoft.com/"; const string resource = "https://azureadwebapitest.onmicrosoft.com/test"; const string clientId = "8ed6bbe9-dce7-4bed-83af-aa5472ac4eef"; const string userId = "test@azureadwebapitest.onmicrosoft.com"; const string password = "[REMOVED for StackOverflow post]"; UserCredential credentials = new UserCredential(userId,password); AuthenticationContext context = new AuthenticationContext(authorityUri); var authresult = context.AcquireToken(resource,clientId,credentials); Console.WriteLine("Access token: {0}",authresult.AccessToken); Console.ReadLine(); } } } 完整的重复步骤如下: 1.创建新的Azure AD目录: 2.添加新应用程序: 3.将“访问应用程序所需的用户分配”设置为“是”.设置“读取目录数据”应用程序权限.复制客户端ID.保存: 4.下载清单.编辑清单并添加两个角色.上传清单: 5.从步骤1返回目录并添加用户 6.将新浏览器打开到https://account.activedirectory.windowsazure.com/并以用户身份登录.更改密码.请注意没有可用的应用 7.返回Classic Portal.将用户分配给Application中的generalclient角色.请注意,用户现已分配给该应用程序 8.返回用户帐户门户并刷新.您可能需要刷新几次或点击一下.请注意,现在显示该应用程序 >在这一点上,设置应该是完整的. 结果: Microsoft.IdentityModel.Clients.ActiveDirectory.dll中发生未处理的“Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException”类型的异常异常 其他信息:AADSTS50105:已登录的用户’test@azureadwebapitest.onmicrosoft.com’未分配给应用程序’8ed6bbe9-dce7-4bed-83af-aa5472ac4eef’的角色. 预期结果: 访问令牌被写入控制台输出. 解决方法
如果您在Azure中托管了Web API并且希望用户能够使用它,那么您需要该资源的令牌.
角色将由Web API资源而不是测试公布.经过身份验证后,资源访问令牌将在其中具有您的Web API可用于授予访问权限的角色. 假设这不是多租户 首先,您必须配置Web API资源并将其清单修改为 现在,Web API已准备就绪,转到其配置选项卡并分配任何用户,可以将其称为UserXYZ以用于特定角色. 接下来,在配置Web API的同一目录中配置Native Client应用程序,并在其配置选项卡 – >中配置.添加应用程序,选择您的Web API资源并选中它以进行委派访问. 回到你的测试应用程序中 var uc = new UserCredential(userName,userPassword); // This is UserXYZ creds var context = new AuthenticationContext(...); //Tenant Id must be correct result = context.AcquireToken("<Your Web API Resource App URI>","<Your Native Client App Id>",uc); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |