在我的ASP.NETMVC核心项目中,我希望在AppRegistration中设置的所有AppRoles作为列表显示在我的视图中。
目前,我尝试了以下几点:
var servicePrincipal = await _graphServiceClient.Applications[_configuration["AzureAd:AppRegistrationId"]]
.Request()
.Select("appRoles")
.GetAsync();
我已经授予了应用程序的API权限Application.Read.All
和Directory.Read.All
,但我仍然得到错误:
服务异常:代码:Authorization_RequestDenied
消息:权限不足,无法完成操作
问题:
- 我是否甚至在正确的道路上实现我想要的东西,只是错过了正确的许可?
- 有谁知道需要什么许可吗?
- 是否有其他方法来完成这项任务?
- 我已经尝试从声明中获取角色,但这只显示了用户的角色,而不是在应用程序注册中设置的所有角色
提前感谢您的任何帮助!
3条答案
按热度按时间amrnrhlw1#
看来我迟到了...
我用委托权限和应用程序权限进行了测试,两者都可以。
对于应用程序权限,可以很容易地使用如下代码:
这需要API权限的应用程序类型:
如果我们想使用委托的API权限,因为这是一个MVC应用程序,我们需要首先将AAD身份验证集成到应用程序中。我们可以按照这个样本。一般来说,在program.cs中添加代码如下:
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration) .EnableTokenAcquisitionToCallDownstreamApi() .AddMicrosoftGraph(builder.Configuration.GetSection("DownstreamApi")) .AddInMemoryTokenCaches();
然后将
graphclient
注入到代码中并使用它调用图API,f3temu5u2#
根据文档
here
,Application.Read.All
是读取应用程序信息的正确权限。我相信你得到这个错误的原因是因为你已经将这个权限分配给了你的应用程序,但是似乎发出Graph API请求的用户没有这个权限。
请检查分配给发出请求的用户的权限,并确保他们具有发出此请求的相应权限。
kwvwclae3#
虽然这不是对我最初问题的直接回答,但我通过使用不同的方法来解决这个问题。
我使用Microsoft.Graph.Auth包生成一个凭证,然后使用该凭证连接到Graph(基本上作为我的应用程序注册连接)。函数如下:
可能不是最好的方式,但工作,所以我很高兴。