c# – Azure AD异常 – AADSTS50105 – “已登录的用户未分配给应用程序的角色”

前端之家收集整理的这篇文章主要介绍了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.返回用户帐户门户并刷新.您可能需要刷新几次或点击一下.请注意,现在显示该应用程序

>在这一点上,设置应该是完整的.
>创建一个新的控制台应用程序
>安装Nuget包“Microsoft.IdentityModel.Clients.ActiveDirectory”
>将代码复制到控制台应用程序(帖子顶部),将密码插入“password”字符串,然后启动调试:

结果:

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资源并将其清单修改
支持角色.这是通过修改清单中的appRoles键来完成的.
然后,您需要更新清单的oauth2Permissions以支持委派的用户访问.在这里(点5)查看此https://azure.microsoft.com/en-us/documentation/articles/active-directory-application-manifest/的信息

现在,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);
原文链接:https://www.f2er.com/csharp/98432.html

猜你在找的C#相关文章