Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ASP.NET Новый топик    Ответить
 ASP.Net Core 2 Identity - отключить перенаправление на страницу логина  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22390
Хочу получить не 302, а 401, если неаутентифицированный юзер пытается получить доступ к [Authorize] контроллеру

Нагуглил только эту статью
https://dotnetcoretutorials.com/2017/09/16/cookie-authentication-asp-net-core-2-0/
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
	.AddCookie(options => {
		options.Events.OnRedirectToLogin = (context) =>
		{
			context.Response.StatusCode = 401;
			return Task.CompletedTask;
		};
	});



Но, во-первых, оно у меня не заработало.
Во-вторых - я не совсем понимаю место этого решения в настройке Identity.
Предлагается установить пакет
Microsoft.AspNetCore.Authentication.Cookies
Зачем, если Identity и так работает.

Или же предполагается, что я вообще не должен ставить Identity и не использовать
services.AddIdentity<AppUser, IdentityRole>
Тогда не понятно, что со всеми остальными плюшками - UserManager и т.п.

Сообщение было отредактировано: 26 апр 18, 21:20
26 апр 18, 18:57    [21371861]     Ответить | Цитировать Сообщить модератору
 Re: ASP.Net Core 2 Identity - отключить перенаправление на страницу логина  [new]
hVostt
Member

Откуда:
Сообщений: 19322
Shocker.Pro,

401 у тебя возвращается, но происходит редирект на логин

https://devblog.dymel.pl/2016/07/07/return-401-unauthorized-from-asp-net-core-api/
27 апр 18, 08:27    [21372604]     Ответить | Цитировать Сообщить модератору
 Re: ASP.Net Core 2 Identity - отключить перенаправление на страницу логина  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22390
Редирект происходит еще на сервере.
На клиенте 401 я не увижу, увижу 302.
Статья, ссылку на которую ты дал, относится к Core 1.x
В Core 2.0 нет options.Cookies

Сообщение было отредактировано: 27 апр 18, 09:45
27 апр 18, 09:45    [21372738]     Ответить | Цитировать Сообщить модератору
 Re: ASP.Net Core 2 Identity - отключить перенаправление на страницу логина  [new]
hVostt
Member

Откуда:
Сообщений: 19322
Shocker.Pro,

вариантов решения много. зависит чего ты хочешь в конечном счёте. вообще для всех запросов возвращать 401? или только при обращении к API? или только при обращениях AJAX?

отключить challenge совсем так (для куки):

services.AddIdentity<ApplicationUser, IdentityRole>(o => {
    o.Cookies.ApplicationCookie.AutomaticChallenge = false;
});


если нужно точечно, то устанавливать OnRedirectToLogin
27 апр 18, 10:22    [21372830]     Ответить | Цитировать Сообщить модератору
 Re: ASP.Net Core 2 Identity - отключить перенаправление на страницу логина  [new]
hVostt
Member

Откуда:
Сообщений: 19322
Shocker.Pro,

у тебя не заработало, потому что ты не сделал предварительно context.Response.Clear();
27 апр 18, 10:23    [21372835]     Ответить | Цитировать Сообщить модератору
 Re: ASP.Net Core 2 Identity - отключить перенаправление на страницу логина  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22390
hVostt
вариантов решения много. зависит чего ты хочешь в конечном счёте. вообще для всех запросов возвращать 401? или только при обращении к API? или только при обращениях AJAX?
Я почему-то не нашел ни один.
По большому счету для запросов к "/api/...". Сейчас все запросы такие, но в дальнейшем вероятно появятся и несколько страниц MVC. Запросы пока идут от WPF-клиента, в будущем могут быть запросы от браузера (как к апи, так и к обычным страницам)
hVostt
отключить challenge совсем так (для куки):
Повторяю - это решение для Core 1.x, в Core 2.0 этого нет.
27 апр 18, 10:33    [21372870]     Ответить | Цитировать Сообщить модератору
 Re: ASP.Net Core 2 Identity - отключить перенаправление на страницу логина  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22390
hVostt
у тебя не заработало, потому что ты не сделал предварительно context.Response.Clear();
Ну сделал - не помогло. В эту часть кода он вообще не заходит.
27 апр 18, 10:36    [21372881]     Ответить | Цитировать Сообщить модератору
 Re: ASP.Net Core 2 Identity - отключить перенаправление на страницу логина  [new]
hVostt
Member

Откуда:
Сообщений: 19322
Shocker.Pro,


ну фиг знает, у нас всё работает :)
добавь middleware, который будет в конце pipeline ловить 302 редирект и возвращать 401, это будет железно работать
27 апр 18, 12:37    [21373444]     Ответить | Цитировать Сообщить модератору
 Re: ASP.Net Core 2 Identity - отключить перенаправление на страницу логина  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22390
hVostt
ну фиг знает, у нас всё работает :)
У вас все работает на Core 2.0?
Какой вариант, который ты привел, которого нет в Core 2.0?
Или который я привел, но тогда подскажи, как выглядит конфигурация Identity в Startup и какие пакеты используются.

hVostt
добавь middleware, который будет в конце pipeline ловить 302 редирект и возвращать 401, это будет железно работать
Я с тем же успехом могу считать статус 302 на клиент статусом отсутствия авторизации. Но хочется же по уму сделать
27 апр 18, 12:41    [21373463]     Ответить | Цитировать Сообщить модератору
 Re: ASP.Net Core 2 Identity - отключить перенаправление на страницу логина  [new]
hVostt
Member

Откуда:
Сообщений: 19322
Shocker.Pro
У вас все работает на Core 2.0?
Какой вариант, который ты привел, которого нет в Core 2.0?
Или который я привел, но тогда подскажи, как выглядит конфигурация Identity в Startup и какие пакеты используются.


У нас Core 2.0 (местами что-то уже на пререлизе 2.1).
У нас OpenId Connect и SSO, вообще не пользуеся моделью Identity хранилища и этой инфраструктурой.


Shocker.Pro
Я с тем же успехом могу считать статус 302 на клиент статусом отсутствия авторизации. Но хочется же по уму сделать


Надо исходники зырить, либо твои, либо ASP.NET COre, благо они в открытом доступе.
27 апр 18, 12:43    [21373478]     Ответить | Цитировать Сообщить модератору
 Re: ASP.Net Core 2 Identity - отключить перенаправление на страницу логина  [new]
hVostt
Member

Откуда:
Сообщений: 19322
Shocker.Pro
Я с тем же успехом могу считать статус 302 на клиент статусом отсутствия авторизации. Но хочется же по уму сделать


Но middleware -- это не плохо )
27 апр 18, 12:47    [21373518]     Ответить | Цитировать Сообщить модератору
 Re: ASP.Net Core 2 Identity - отключить перенаправление на страницу логина  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22390
hVostt
У нас OpenId Connect и SSO, вообще не пользуеся моделью Identity хранилища и этой инфраструктурой
а, ну тогда понятно

hVostt
Надо исходники зырить, либо твои, либо ASP.NET COre, благо они в открытом доступе.
Не, ну а чо зырить, пока я буду изучать, что там понаворотили, уже третья версия выйдет и опять все перепишут.

Внутри services.AddIdentity пачка регистраций сервисов, в том числе и этого действия. По идее, можно раскурить, продублировать и переопределить ненужное и использовать вместо services.AddIdentity всю это последовательность. Но я не люблю коробку ковырять, они потом опять что-нить переделают.

Раньше ведь был AutomaticChallenge = false, вещь востребованная, может одумаются и добавят настройку.
27 апр 18, 13:13    [21373720]     Ответить | Цитировать Сообщить модератору
 Re: ASP.Net Core 2 Identity - отключить перенаправление на страницу логина  [new]
hVostt
Member

Откуда:
Сообщений: 19322
Shocker.Pro,

вот breaking changes на эту тему, подробно

https://github.com/aspnet/Announcements/issues/232
27 апр 18, 13:37    [21373857]     Ответить | Цитировать Сообщить модератору
 Re: ASP.Net Core 2 Identity - отключить перенаправление на страницу логина  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22390
Во-первых, там вместо
New:app.AddAuthentication
по всей видимости следует читать
services.AddAuthentication

И тогда мы возвращаемся к первому моему вопросу - какое место здесь занимает services.AddIdentity?
И если его убрать, то как мне организовывать свой класс пользователя.
Тут вроде все понятно разжевано - реализовываешь свой класс юзера и хранилища и всё, дальше работает из коробки. А если без services.AddIdentity, то как тогда?

Я вообще может где-то заблудился - Authentication в данном случае часть Identity или это взаимоисключающие вещи, или перпендикулярные?
27 апр 18, 14:16    [21374107]     Ответить | Цитировать Сообщить модератору
Все форумы / ASP.NET Ответить