2017-02-15 22 views
0

Я работаю над приложением с веб-API и разными клиентами (мобильное приложение, браузер). Я хочу иметь различный токен доступа для каждого типа клиента для того же пользователя. Причина в том, что пользователь может выходить из одного устройства, но остается включенным на других устройствах (подобно тому, как это происходит с Facebook).Как создать несколько токенов для разных типов клиентов в ASP.NET Web API

Я знаю, что структура ASP .Net Identity генерирует единый токен для пользователя, не обращая внимания на тип клиента. Есть ли другие рамки? Или это должно быть сделано путем хранения некоторых деталей клиента в базе данных?

+0

Дошел до каких-либо заключений? –

+0

Я начал реализацию, которую вы предлагаете. Скоро будет обновляться. На стороне примечание, для выхода люди говорят, чтобы забыть токен на стороне клиента. Есть ли безопасный способ, чем это? – HSharma

+0

Забыть токен на стороне клиента - хорошая практика. Кроме того, более короткий срок для токена на сервере будет лучше. –

ответ

1

Вы можете создать маркер вручную, и в это время вы можете добавить претензии к токену и вернуть их клиенту. Когда клиенты делают запрос на сервер, вы можете извлечь заявку из токена и выбрать тип устройства.

Создать маркер, как показано ниже:

var identity = new ClaimsIdentity(Startup.OAuthOptions.AuthenticationType); 

AuthenticationTicket ticket = new AuthenticationTicket(identity, new AuthenticationProperties()); 
var currentUtc = new SystemClock().UtcNow; 
identity.AddClaim(new Claim("device_type", "android/ios/web")); 

ticket.Properties.IssuedUtc = currentUtc; 
var expiryInterval = int.Parse("20"); 

var access_token = Startup.OAuthOptions.AccessTokenFormat.Protect(ticket); 

маркер доступа в запросе и требование от маркера, как указано ниже:

ClaimsPrincipal principal = Request.GetRequestContext().Principal as ClaimsPrincipal; 
var customClaimValue = principal.Claims.Where(c => c.Type == "device_type").Single().Value; 

«customClaimValue» должен иметь тип устройства.

2

Я считаю, что создание разных токенов для разных клиентов не обязательно для достижения вашей цели. Во-первых, в asp.net для каждого запроса маркера на конечную точку/токена выдается новый токен-носитель.

поэтому каждому клиенту выдается другой токен для каждого запроса. Затем клиент (сеть, мобильный или любой другой) может затем сохранить токен и использовать его для доступа к авторизованному ресурсу. Выход из системы - это только вопрос забывания маркера на стороне клиента.

ПРИМЕЧАНИЕ: Не забывайте выдавать токены с коротким сроком действия по соображениям безопасности, и вы можете использовать пункты токенов обновления, чтобы выдать новые токены с истекшим сроком действия.