Использование атрибута авторизации с аутентификацией на основе настраиваемых утверждений

Я хочу создать свой собственный процесс аутентификации с использованием аутентификации на основе утверждений в моем проекте ASP.net MVC. Я хочу иметь возможность использовать атрибут авторизации (включая роли), например [Authorize(Roles="admin")] и [Authorize(Roles="Frontenduser")], поскольку у меня будет несколько типов пользователей.

Я не хочу использовать идентификатор ASP.net, поскольку он делает слишком много, чем мне нужно. Мне также нужны совершенно разные данные для разных типов пользователей.

Я знаю, что могу наследовать от класса AuthorizeAttribute, но не уверен, как все это работает с утверждениями. Итак, во-первых, может ли кто-нибудь порекомендовать хороший пакет для использования аутентификации на основе утверждений, а во-вторых, как мне остановить работу атрибута Authorize с удостоверением ASP.net и заставить его работать с моей пользовательской аутентификацией на основе утверждений? Я просмотрел другие вопросы и другие решения в Интернете, но не могу найти подходящего объяснения или решения.

См. также:  Сбой развертывания Azure Pipeline в службе веб-приложений с отсутствующим обязательным свойством OutputPath
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. dan

    Вы можете использовать авторизацию на основе политик. Идентификация — это проверка подлинности и отличается от авторизации. Для этого вы можете создать политику в своем классе запуска. Это мой пример в сервисах настройки. Если вам не нужна Identity, вы можете использовать токены-носители 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. Для аутентификации знаете ли вы, как я могу использовать свою собственную систему, например, если у меня есть класс с методом, который сравнивает пароль пользователя с паролем базы данных, как я могу сообщить системе и атрибуту авторизации, если пользователь аутентифицирован или не аутентифицирован ? Имеет ли это смысл? Спасибо person dan; 21.02.2018

    Да, вы должны понимать, что аутентификация — это не авторизация. Аутентификация — это то, кем является пользователь, а Identity — отличная библиотека, которая помогает вам создавать и отслеживать пользователей. Авторизация — это то место, куда этот пользователь может перейти в приложении. В вашем приложении нет смысла выполнять всю эту работу с запросом пароля, пароли хешируются с помощью UserManager через Identity. Это все библиотеки, и я знаю, что это отстой, но просто не торопитесь и изучите или напишите собственную версию. Вы можете делать то, что хотите, с помощью наследования пользователя от IdentityUser, или вы можете добавить список утверждений и сделать роли для пользователей и использовать политику авторизации person dan; 22.02.2018

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: