对于MVC Web应用程序,我已经了解了几种获取Active Directory用户组(和角色)的方法。
使用的模板由Microsoft提供:
https://developer.microsoft.com/en-us/graph/docs/concepts/get-started(Microsoft Graph API,ASP.NET,Azure AD v2.0端点,SDK示例)
即使在Application Manifest(apps.dev.microsoft.com)中启用,Microsoft也不会返回组声明。显然,如果用户超过5组,则组不会返回。所以我试图通过GetMemberObjects调用来获取组和角色。
我希望在自定义AuthorizeAttribute类中获取用户的组和角色,但是会出现问题......
await client.Me.GetMemberObjects(true).Request().PostAsync()
AuthorizationAttribute
中的可覆盖方法不允许异步任务,这意味着我不能
在await
等方法中使用OnAuthorization
,并使用async void
投掷
异常。.Result
尝试阻塞同步调用也不起作用,因为上下文被阻止 - 完成异步任务无法返回主上下文,因此发生死锁(无限页面加载)。与GetAwaiter().GetResult()
相同的问题。.ConfigureAwait(false)
添加到所有等待中都不起作用,因为Graph库我假设内置等待我无法配置为false。ClaimsPrincipal
,但是这种技术可能也会失败,因为无法将可覆盖的方法更改为返回{{1 }}。解决方案:
Task<ClaimsPrincipal>
,但问题是
在尝试获取访问令牌时仍然存在。 client.SendAsync(request).Result
为IAuthProvider.GetUserAccessTokenAsync
,因此async
在所有后续父母中都是必需的,因为await
将在100%的时间内陷入僵局。所以我会再次陷入.Result
。void OnAuthorization
不传递httpContext并且线程不安全。如果没有别的办法,我打算把它作为最后的手段。理想情况下,我希望在Task.Run(()=>Method())
或OnAuthorization
中获取用户的组和角色,以检查某个控制器操作的授权。但是,如果有其他方式......建议?感谢。