Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Опять авторизация ASP.NET Core 2.1 VS 2017 / 21 сообщений из 21, страница 1 из 1
22.03.2019, 09:48
    #39789909
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
Добрый день, коллеги!

Хочу реализовать сквозную авторизацию, с хранением ролей в базе данных.
Хочу так сделать, чтобы сисадминов не дергать, чтобы добавить роли.
При входе автоматически определяю логин, если человек есть в БД то ищу дальше роли и права, если нет, то записываю этого человека в СУБД с уникальным логином, под которым он вошел.
Как то так.
Но пока не могу решить примитивную проблему.
Вроде пример взял из приличной ссылки тынц .
AuthenticationMiddleware.cs:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
namespace XXX.Models.Authentication
{
    public class AuthenticationMiddleware
    {
        private readonly RequestDelegate _next;

        // Dependency Injection
        public AuthenticationMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public async Task Invoke(HttpContext context)
        {
            //Reading the AuthHeader which is signed with JWT
            string authHeader = context.Request.Headers["Authorization"];

            if (authHeader != null)
            {
                // Identity Principal
                var claims = new[]
                {
                    new Claim("name", "vadipok"),
                    new Claim(ClaimTypes.Role, "admin"),
                };
                var identity = new ClaimsIdentity(claims, "basic");
                context.User = new ClaimsPrincipal(identity);
            }
            //Pass to the next middlware
            await _next(context);
        }
    }
}



Startup.cs:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            ............................................

            app.UseMiddleware<AuthenticationMiddleware>();

            ............................................
        }



HomeController.cs:
Код: c#
1.
2.
3.
4.
5.
6.
7.
        [Authorize(Roles = "admin")]
        public IActionResult Test()
        {
            ViewData["Message"] = "Test page.";

            return View();
        }
...
Рейтинг: 0 / 0
22.03.2019, 10:18
    #39789926
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
vadipokНо пока не могу решить примитивную проблему.
Вроде пример взял из приличной ссылки тынц .
Начни с примера от MS.
Вроде это очевидно.
...
Рейтинг: 0 / 0
22.03.2019, 10:21
    #39789927
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
vadipokссылкикак определил?
Вроде гитхаб это обычный публичный базар продуктов.
...
Рейтинг: 0 / 0
22.03.2019, 11:58
    #39789971
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
Petro123vadipokНо пока не могу решить примитивную проблему.
Вроде пример взял из приличной ссылки тынц .
Начни с примера от MS.
Вроде это очевидно.

К сожалению я ответы в 95 процентах случаев нахожу именно в таких вот базарах.
А в документации MS без бутылки не разберешься.
Стиль изложения материала часто напоминает, как будто ты сам в режиме Debug копаешь класс.
...
Рейтинг: 0 / 0
22.03.2019, 12:38
    #39789994
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
vadipok,
Бывает, что MS. заумно делает примеры.
Но это не значит что надо забить и пойти на базар где у продавца 1 коммит и 3 скачки его примера.
...
Рейтинг: 0 / 0
22.03.2019, 14:37
    #39790090
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
Может хотя бы подсказку кинете?
Вот тут нашел, что надо сделать так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        private async Task Authenticate(User user)
        {
            // создаем один claim
            var claims = new List<Claim>
            {
                new Claim(ClaimsIdentity.DefaultNameClaimType, user.Email),
                new Claim(ClaimsIdentity.DefaultRoleClaimType, user.Role?.Name)
            };
            // создаем объект ClaimsIdentity
            ClaimsIdentity id = new ClaimsIdentity(claims, "ApplicationCookie", ClaimsIdentity.DefaultNameClaimType,
                ClaimsIdentity.DefaultRoleClaimType);
            // установка аутентификационных куки
            await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(id));
        }



И большинство примеров именно такие, могут работать только внутри контроллеров.
Вот как его заставить работать в Startup.cs?

Подскажите плиз.
...
Рейтинг: 0 / 0
22.03.2019, 14:50
    #39790109
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
vadipokВот тут нашел,там скрин с кнопкой и подписью Без аутентификации.
Найди где нажимается кнопка и.... с аутентификацией.
...
Рейтинг: 0 / 0
22.03.2019, 15:04
    #39790125
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
...
Рейтинг: 0 / 0
22.03.2019, 15:13
    #39790131
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
vadipokИ большинство примеров именно такие, могут работать только внутри контроллеров.
Вот как его заставить работать в Startup.cs?

Подскажите плиз.Естественно, потому что большинство применений авторизации идут в контексте MVC. Ты же хочешь сделать авторизацию вне MVC, само собой, там не будет ни контроллеров, ни экшенов и каких-то других контекстов, свойственных MVC. Отсюда вопрос - а что именно ты хочешь авторизовать? Доступ к определенным URL-ам?
...
Рейтинг: 0 / 0
22.03.2019, 15:21
    #39790141
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
Shocker.ProvadipokИ большинство примеров именно такие, могут работать только внутри контроллеров.
Вот как его заставить работать в Startup.cs?

Подскажите плиз.Естественно, потому что большинство применений авторизации идут в контексте MVC. Ты же хочешь сделать авторизацию вне MVC, само собой, там не будет ни контроллеров, ни экшенов и каких-то других контекстов, свойственных MVC. Отсюда вопрос - а что именно ты хочешь авторизовать? Доступ к определенным URL-ам?

Как это не MVC, хочу сделать MVC.
И да, для начала к определенным методам контроллеров.
И пока не знаю что дальше будет.

vadipokХочу реализовать сквозную авторизацию, с хранением ролей в базе данных.
Хочу так сделать, чтобы сисадминов не дергать, чтобы добавлять роли.
При входе автоматически определяю логин, если человек есть в БД то ищу дальше роли и права, если нет, то записываю этого человека в СУБД с уникальным логином, под которым он вошел.
...
Рейтинг: 0 / 0
22.03.2019, 15:23
    #39790144
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
vadipokИ да, для начала к определенным методам контроллеров.повторяю, в мидлваре нет контроллеров, контроллеры - это сущность MVC, которая сама является [другим] мидлваре.

Чем тебя не устраивают фильтры авторизации?
...
Рейтинг: 0 / 0
22.03.2019, 15:24
    #39790145
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
Shocker.ProЧем тебя не устраивают фильтры авторизации?В частности, глобальный фильтр авторизации
...
Рейтинг: 0 / 0
22.03.2019, 15:29
    #39790151
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
Shocker.ProvadipokИ да, для начала к определенным методам контроллеров.повторяю, в мидлваре нет контроллеров, контроллеры - это сущность MVC, которая сама является [другим] мидлваре.

Чем тебя не устраивают фильтры авторизации?

Все устраивает, в том то и дело я хочу использовать [Authorize (Roles="admin")].
Так проблема в том что не знаю как приложению правильно сообщить при входе через windows авторизацию, что у меня роль admin.
Нет же страницы входа, сквозная авторизация.
Приложение ASP.NET Core 2.1 MVC.

Выше скинули ссылку, пойду покопаюсь.

Спасибо.
...
Рейтинг: 0 / 0
22.03.2019, 15:54
    #39790168
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
Shocker.Pro,
Да он про контроллеры так брякнул. От неопытности.
...
Рейтинг: 0 / 0
22.03.2019, 16:04
    #39790180
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
vadipok,

.. вот тут еще гляньте ...
ASP.NET CORE AUTHORIZATION FOR WINDOWS, LOCAL ACCOUNTS

...хотя, как по мне, чем дальше в лес, тем толще партизаны ... :) ... проще на FormAuthentication перевести .. или еще как ..
...
Рейтинг: 0 / 0
22.03.2019, 16:33
    #39790200
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
carrotikпрощеда. Но куда деваться если MS всех вел по пустыне:
Куки, Токены, claim, identity, и т.д.
))
...
Рейтинг: 0 / 0
22.03.2019, 16:52
    #39790208
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
carrotikvadipok,

.. вот тут еще гляньте ...
ASP.NET CORE AUTHORIZATION FOR WINDOWS, LOCAL ACCOUNTS

...хотя, как по мне, чем дальше в лес, тем толще партизаны ... :) ... проще на FormAuthentication перевести .. или еще как ..

Спасибо! Завтра посмотрю.

Сегодня нашел отличный пример вот тут ТЫНЦ
Только он зараза работает НЕ правильно. )))
Я и имею доступ в test, чего конечно не должно быть.
Получается вот это условие отрабатывает не правильно policy.RequireClaim("Admin").
Реализация у меня
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
        [Authorize(Policy = "Admin")]
        public IActionResult Test()
        {
            ViewData["Message"] = "Test page.";

            return View();
        }

        [AllowAnonymous]
        public async Task<IActionResult> Login(string returnUrl)
        {
            var identity = ((ClaimsIdentity)HttpContext.User.Identity);

            var claims = new List<Claim>
            {
                new Claim("Authenticated", "True"),
                new Claim("tutututut", "True")
            };

            var claimsIdentity = new ClaimsIdentity(
                claims,
                identity.AuthenticationType,
                identity.NameClaimType,
                identity.RoleClaimType);

            await HttpContext.SignInAsync(
                CookieAuthenticationDefaults.AuthenticationScheme,
                new ClaimsPrincipal(claimsIdentity),
                new AuthenticationProperties());

            return Redirect(returnUrl);
        }

        [AllowAnonymous]
        public IActionResult AccessDenied(string returnUrl)
        {
            if (User.FindFirst("Authenticated") == null)
                return RedirectToAction("Login", new { returnUrl });

            return View();
        }



Startup.cs
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
            services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                .AddCookie(options =>
                {
                    options.LoginPath = "/Home/Login";
                    options.AccessDeniedPath = "/Home/AccessDenied";
                });

            services.AddAuthorization(options =>
            {
                options.AddPolicy("Authenticated", policy => policy.RequireClaim("Authenticated"));
                options.AddPolicy("Admin", policy => policy.RequireClaim("Admin"));
                options.AddPolicy("Admin123", policy => policy.RequireClaim("Admin123"));
            });
...
Рейтинг: 0 / 0
22.03.2019, 17:13
    #39790216
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
vadipokСегодня нашел отличный пример вот тут ТЫНЦ ну а на кнопку в новом проекте то ткнул?
...
Рейтинг: 0 / 0
22.03.2019, 17:24
    #39790227
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
vadipokсквозную авторизацию, с хранением ролей в базе данных.у MS это через либу Identity.
Она хранит роли и юзверей в базе.
...
Рейтинг: 0 / 0
22.03.2019, 17:27
    #39790230
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
vadipokwindows авторизацию, что у меня роль admin.дак у тебя вин авторизация или роли в базе?
Определись.
...
Рейтинг: 0 / 0
25.03.2019, 07:46
    #39790737
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять авторизация ASP.NET Core 2.1 VS 2017
Спасибо коллеги!

В выходные в спокойной обстановке посидел и покопался в просторах инета.
Вот тут отличный туториал ТЫНЦ .
После третьего шага все заработало.

Спасибо всем.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Опять авторизация ASP.NET Core 2.1 VS 2017 / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]