【问题标题】:Use Authorize Attribute with Custom Claims based Authentication将授权属性与基于自定义声明的身份验证一起使用
【发布时间】:2018-02-20 17:41:09
【问题描述】:

我想在我的 ASP.net MVC 项目中使用基于声明的身份验证来构建自己的身份验证过程。我希望能够使用 Authorize 属性(包括角色),例如[Authorize(Roles="admin")][Authorize(Roles="Frontenduser")],因为我将拥有多种类型的用户。

我不想使用 ASP.net 身份,因为它的功能比我需要的要多。我还需要为不同类型的用户存储完全不同的数据。

我知道我可以从 AuthorizeAttribute 类继承,但我不确定它如何与声明一起使用。因此,首先,任何人都可以推荐一个好的包来使用基于声明的身份验证,其次,如何停止 Authorize 属性与 ASP.net Identity 一起使用并让它与我的自定义基于声明的身份验证一起使用? 我查看了网络上的其他问题和其他解决方案,但找不到合适的解释或解决方案。

【问题讨论】:

    标签: c# asp.net authentication authorization claims-based-identity


    【解决方案1】:

    您可以使用基于策略的授权。身份是身份验证,不同于授权。为此,您可以在启动课程中制定政策。这是我在配置服务中的一个示例。如果您不需要身份,您可以使用 JWT 不记名令牌并制定策略。 从 nuget 获取这些包:

    using Microsoft.AspNetCore.Authentication.JwtBearer;
    using Microsoft.IdentityModel.Tokens;
    
    
    
          public void ConfigureServices(IServiceCollection services)
            {
    
      //new policy makes [Authorize (Policy = "Your custom Policy")] availible by claims This is what you put on controllers
                services.AddAuthorization((options) => {
                    options.AddPolicy("Your custom Policy", policybuilder =>
                    {               
                        policybuilder.RequireAuthenticatedUser();
                        policybuilder.RequireClaim("role", "PayingUserExampleProperty");
    
                    });
                });
    

    在你的配置中

    添加

       public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
        app.UseAuthentication();
    ...
    

    好好读一读:

    https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies

    【讨论】:

    • 太好了,这很有意义,现在我了解了如何使用声明和策略进行授权,但是我认为 JWT 不记名令牌仅在通过 ajax / js 访问控制器时使用。或者,我想直接使用 url(链接)和 mvc 表单访问控制器。对于身份验证,您知道如何使用自己的系统吗?例如,如果我有一个类,该类具有将用户密码与数据库密码进行比较的方法,如果用户已通过身份验证或未通过身份验证,我将如何告诉系统和授权属性?这有意义吗?谢谢
    • 是的,您需要了解身份验证不是授权。身份验证是用户是谁,而身份是一个很棒的库,可以帮助您创建和跟踪用户。授权是用户可以进入应用程序的地方。在您的应用程序中进行所有密码查询工作是没有意义的,密码是通过身份使用 UserManager 进行哈希处理的。这些都是库,我知道这很糟糕,但请花点时间学习或编写自定义版本。您可以通过用户继承 IdentityUser 来做您想做的事情,或者您可以添加声明列表并为用户创建角色并使用授权策略
    猜你喜欢
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    相关资源
    最近更新 更多