首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NET核心3.1基于角色的Microsoft.Identity.Web授权问题

NET核心3.1基于角色的Microsoft.Identity.Web授权问题
EN

Stack Overflow用户
提问于 2020-07-05 23:31:40
回答 2查看 1.6K关注 0票数 0

我正在使用来自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

代码示例如下:

代码语言:javascript
复制
    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核心需要这样做。

下面的图像显示令牌内容的调试:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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)。

票数 1
EN

Stack Overflow用户

发布于 2020-07-06 08:18:29

检查HttpContext.User.Claims集合以确保存在roles声明,

艾迪提似乎是。

确保app.UseAuthorization();行以正确的顺序出现在Startup.cs中的配置()中。

从控制器操作中移除授权属性,并在这些操作中执行HttpContext.User.IsInRole()方法,以检查按预期执行的角色。

根据asp.net核心团队的建议,该示例建议使用新的ASP.NET核中基于策略的授权

如果上述所有步骤都不起作用,那么使用提供的这里步骤再次创建项目。注意这点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62747389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档