0

Просьба представить свои отзывы о моем решении против следующих требований.asp.net Web Api пользовательская проверка подлинности для мобильного клиента

Требования (аналог):

1. пусть говорят, что аутентификация Токен сделана из электронной почты и дату и шифруется

1б аутентификации токена отправить обратно клиенту через коллектор

аутентификации 1.c Токен хранится на клиенте и сервере

Мое решение:

1) Отправить аутентификацию Токен обратно клиенту через заголовок. я использовал cookie и следующий код.

HttpCookie cookie = new HttpCookie("AuthenticationToken"); 
     cookie.Value = "EncryptedToken"; 
     Response.Cookies.Add(cookie); 

2) соберу аутентификация Токен в базе данных, и для каждого запроса я сравниваю маркер сохраняется в куки с маркером, хранящейся в базе данных. (предположим, что операции шифрования, дешифрования выполняются должным образом)

Ваши отзывы/комментарии?

+1

Файлы cookie отлично работают для веб-браузеров, но если вы также хотите настроить таргетинг на мобильных и настольных клиентов, вы можете рассмотреть что-то еще – cecilphillip

+0

, вы правы. я закончил использование sqllite и отправил токен аутентификации через http-заголовок. –

ответ

1

У меня нет экспертных знаний в области безопасности. Для меня ваша идея звучит выполнимо.

Тем не менее, мне было любопытно, почему вы хотели сделать «custom» аутентификация как это? Вы посмотрели на «build it» Аутентификация ASP.NET в Web.API?

Тогда вы могли бы create a custom HttpOperationHandler используя стандартный .net такие вещи, как:

var ticket = FormsAuthentication.Decrypt(val); 
var ident = new FormsIdentity(ticket); 
... 
var principle = new GenericPrincipal(identity, new string[0]); 
Thread.CurrentPrincipal = principle; 
... 
if (!principal.Identity.IsAuthenticated) 
    return false; 

Кроме того, вы можете прочитать о Thread.CurrentPrincipal and Current.User

Про то, что вам не нужно хранить маркер аутентификации в некоторых DB на сервере и получить его по каждому запросу.

+0

В Restful вы не можете использовать API-интерфейс ASP.NET –

+1

действительно? почему нет? – Cotten

+0

Это очень эффективное решение. Вы можете AuthorizationFilterAttribute сделать это. – Junto

1

Мне кажется ОК. Однако, если вы шифруете (так что вы можете расшифровать обратно), и можете узнать, как вы отправили электронную почту (идентифицирующий пользователя) и маркер времени (следовательно, проверить, истек ли срок действия или нет), вам все равно нужно хранить его в базе данных? Я бы, только если у меня были другие требования, такие отслеживания и т. Д.

+0

Я храню его в базе данных, потому что иначе как я могу отслеживать пользователя среди разных запросов.
, например, первый запрос пользователя - get, следующий запрос - post ...
, так что в основном я проверяю пользователя для каждого запроса ... Я надеюсь, что я объяснил это. –

Смежные вопросы