我正在使用来自GitHub“Azure -Sample/GitHub”的MS代码示例将.net Core3.1webapp连接到Azure中的单个租户。
维护此代码示例的Micorsoft员工最近于2020年6月25日进行了一次网络研讨会,他在使用AppRoles进行基于角色的授权方面做了一个高级别的概述。下面的图像显示了从他的演示文稿中显示的代码示例,该示例使用一个较早的NuGet库NuGet来管理登录。

但是,在他在GitHub上使用的示例项目代码中,他使用了更新的'Microsoft.Identity.Web‘库,该库似乎没有任何代码部分,其中我提取了成功登录身份验证后从Azure返回的令牌中的角色声明。
参考: UTUBE =在您的应用程序中使用Microsoft平台实现授权的演示文稿-2020年6月
参考: MS代码示例项目= https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/1-WebApp-OIDC
代码示例如下:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.Unspecified;
// Handling SameSite cookie according to https://learn.microsoft.com/en-us/aspnet/core/security/samesite?view=aspnetcore-3.1
options.HandleSameSiteCookieCompatibility();
});
// **THIS ONE LINER HAS REPLACED THE FORMER CODE SECTION FROM THE OLDER LIBRARY**
// Sign-in users with the Microsoft identity platform
services.AddSignIn(Configuration);
services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
}).AddMicrosoftIdentityUI();
services.AddRazorPages();
}我希望在MVC控制器和Razor页面上使用基于角色的访问控制,方法是使用授权(Roles= "ViewLogs")来修饰方法,但是当我登录测试页面时,我会被拒绝访问,因此在某个地方缺少一些必需的代码,而我不知道应该在什么地方或哪里添加所需的代码才能工作。
我已经证实,在登录后从Azure接收回来的令牌中,我成功地接收了角色"ViewLogs“,只是这里缺少一些重要的东西,为了从令牌中的声明中定义角色策略检查,.NET核心需要这样做。
下面的图像显示令牌内容的调试:

发布于 2020-07-06 06:12:22
下面是在.net核心https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/5-WebApp-AuthZ/5-1-Roles#support-in-aspnet-core-middleware-libraries中使用msal角色的正式ms示例
它将角色声明映射到策略和组,然后授权使用策略,但是,我相信您仍然可以授权使用角色或组。它还使用microsoft.identity.web (msal)。
发布于 2020-07-06 08:18:29
检查HttpContext.User.Claims集合以确保存在roles声明,
艾迪提似乎是。
确保app.UseAuthorization();行以正确的顺序出现在Startup.cs中的配置()中。
从控制器操作中移除授权属性,并在这些操作中执行HttpContext.User.IsInRole()方法,以检查按预期执行的角色。
根据asp.net核心团队的建议,该示例建议使用新的ASP.NET核中基于策略的授权
如果上述所有步骤都不起作用,那么使用提供的这里步骤再次创建项目。注意这点。
https://stackoverflow.com/questions/62747389
复制相似问题