Re[7]: Swashbuckle - пример кастомной формы типа авторизации
От: Ночной Смотрящий Россия  
Дата: 04.09.20 20:40
Оценка: 82 (2)
Здравствуйте, Shmj, Вы писали:

НС>>Дублировать ничего не надо, это в хидере передается.

S>Где написать, чтобы в каждом из 100 методов появился такой параметр?

Ну ты уже совсем обленился. Ни вопрос нормально задать, ни погуглить.
private class AddAccessToken : IOperationFilter
{
    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
    {
        var descriptor = (ReflectedHttpActionDescriptor)apiDescription.ActionDescriptor;
        var actionAttributes =
            descriptor.MethodInfo.GetCustomAttributes(typeof(AuthScopeAttribute), true).OfType<AuthScopeAttribute>();
        var controllerAttributes =
            descriptor.ControllerDescriptor.GetCustomAttributes<AuthScopeAttribute>(true).OfType<AuthScopeAttribute>();
        if (actionAttributes.All(a => a.AuthorizationType == AuthorizationType.None)
            && controllerAttributes.All(a => a.AuthorizationType == AuthorizationType.None))
            return;
        if (operation.parameters == null)
            operation.parameters = new List<Parameter>();
        operation.parameters.Add(
            new Parameter
            {
                description = "Access token",
                @in = "header",
                name = "Authorization",
                required = true,
                type = "string"
            });
    }
}
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Swashbuckle - пример кастомной формы типа авторизации
От: Shmj Ниоткуда  
Дата: 04.09.20 07:32
Оценка:
Вопрос такой.

Хотелось бы передавать в HTTP-заголовках, чтобы не засорять методы:

1. Если авторизован — то данные авторизации (ID-клиента и ключ).
2. Если не авторизован — то предпочтения (язык, часовой пояс и т.д.).

Не знаю хорошая ли идея, но если сервисом могут работать как авторизованные так и не авторизованные — то по идее так (не передавать же в каждый метод предпочтения, тем более они не нужны для авторизованных — их предпочтения берутся из базы).

А так же как-то это совместить с Swashbuckle — т.е. чтобы была форма авторизации, но с возможностью просто указать предпочтения без ID-клиента/ключа.

Вопросы:

1. Хорошая ли идея так расширить форму авторизации?
2. Попадался ли вам пример подобной формы, чтобы не писать все с нуля?
Re: Swashbuckle - пример кастомной формы типа авторизации
От: Mihas  
Дата: 04.09.20 08:05
Оценка:
Здравствуйте, Shmj, Вы писали:

S>2. ... предпочтения (язык, часовой пояс и т.д.).

А чем устоявшиеся подходы не нравятся?
Re[2]: Swashbuckle - пример кастомной формы типа авторизации
От: Shmj Ниоткуда  
Дата: 04.09.20 08:08
Оценка:
Здравствуйте, Mihas, Вы писали:

S>>2. ... предпочтения (язык, часовой пояс и т.д.).

M>А чем устоявшиеся подходы не нравятся?

Всем нравятся. Но как это совместить с Swashbuckle?

Хотелось бы форму, где можно было указать либо ключ авторизованного клиента либо заголовки для неавторизованных.
Re: Swashbuckle - пример кастомной формы типа авторизации
От: bnk СССР http://unmanagedvisio.com/
Дата: 04.09.20 09:25
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вопрос такой.


S>Хотелось бы передавать в HTTP-заголовках, чтобы не засорять методы:


S>1. Если авторизован — то данные авторизации (ID-клиента и ключ).

S>2. Если не авторизован — то предпочтения (язык, часовой пояс и т.д.).

Обычно, в этом случае, чтобы не париться, делается так называемая "анонимная авторизация", когда пользователь всегда аутентифицирован.
Просто некоторые пользователи имеют "анонимный" ID (просто ключ типа guid), и не имеют почты, имени, ну и т.д., но имеют профиль.

Также это решает проблему с тем, если пользователь таки решит зарегистрироваться — его профиль с данными уже есть,
просто нужно будет привязать к нему имя пользователя и почту.

В результате в запросе просто всегда имеешь "аутентифицированного" пользователя.
Отредактировано 04.09.2020 9:29 bnk . Предыдущая версия . Еще …
Отредактировано 04.09.2020 9:28 bnk . Предыдущая версия .
Отредактировано 04.09.2020 9:28 bnk . Предыдущая версия .
Re: Swashbuckle - пример кастомной формы типа авторизации
От: Ночной Смотрящий Россия  
Дата: 04.09.20 10:23
Оценка:
Здравствуйте, Shmj, Вы писали:

S>А так же как-то это совместить с Swashbuckle — т.е. чтобы была форма авторизации, но с возможностью просто указать предпочтения без ID-клиента/ключа.


https://en.wikipedia.org/wiki/JSON_Web_Token
https://en.wikipedia.org/wiki/OAuth

OAuth2 swashbuckle поддерживает искаропки.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: Swashbuckle - пример кастомной формы типа авторизации
От: Shmj Ниоткуда  
Дата: 04.09.20 12:21
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>OAuth2 swashbuckle поддерживает искаропки.


Емнип, OAuth2 перенаправляет на URL с формой авторизации, после чего редиректит назад с ключом, который нужно проверить. А хотелось бы просто задать HTTP-Header-ы без всяких перенаправлений.
Re[3]: Swashbuckle - пример кастомной формы типа авторизации
От: Ночной Смотрящий Россия  
Дата: 04.09.20 13:35
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Емнип, OAuth2 перенаправляет на URL с формой авторизации,


Только для auth code flow. И это правильно с точки зрения безопасности.
А есть еще, как минимум implicit, client и resource owner.

S> после чего редиректит назад с ключом, который нужно проверить. А хотелось бы просто задать HTTP-Header-ы без всяких перенаправлений.


Так нет же никаких проблем задать хидер, если токен тебе известен. Выглядит примерно так:

... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[4]: Swashbuckle - пример кастомной формы типа авторизации
От: Shmj Ниоткуда  
Дата: 04.09.20 15:04
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Так нет же никаких проблем задать хидер, если токен тебе известен. Выглядит примерно так:


Просто не хочется в каждом методе отдельно дублировать это.
Re[5]: Swashbuckle - пример кастомной формы типа авторизации
От: Ночной Смотрящий Россия  
Дата: 04.09.20 20:03
Оценка:
Здравствуйте, Shmj, Вы писали:

НС>>Так нет же никаких проблем задать хидер, если токен тебе известен. Выглядит примерно так:

S>Просто не хочется в каждом методе отдельно дублировать это.

Дублировать ничего не надо, это в хидере передается.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[6]: Swashbuckle - пример кастомной формы типа авторизации
От: Shmj Ниоткуда  
Дата: 04.09.20 20:31
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Дублировать ничего не надо, это в хидере передается.


Где написать, чтобы в каждом из 100 методов появился такой параметр?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.