2015-09-17 3 views
4

Я делаю вызов OAuth2 из своего веб-приложения ASP.NET MVC в свой веб-интерфейс через JavaScript для аутентификации моего пользователя и получения токена. Веб-API обращается к базе данных SQL Server, где логин пользователя хранится с использованием Identity и типичных таблиц AspNetUsers. Мой API-вызов возвращает токен доступа 20 минут и токен обновления 2 недели. API и потребительские приложения - это продукты, которые мы разрабатываем, с которыми будут регистрироваться наши клиенты. Другими словами, весь код на нашей стороне.Где хранить токены доступа и обновления

Я знаю, что должен обновить токен доступа до истечения срока его действия, передав API токен обновления. Мой вопрос: где я могу хранить токены доступа и обновления на клиенте для использования в своем JavaScript для последующего вызова API или для обновления токена? Люди в Интернете говорят, что хранение чего-либо на стороне клиента плохо, куки-файлы небезопасны и т. Д., И без каких-либо решений. Местное хранилище? Но, конечно, это вызовы Ajax в JavaScript, которые мы делаем для API, поэтому токены должны существовать где-то на стороне клиента! Это сводит меня с ума, пытаясь понять это. Я знаю, что мне нужно хотя бы использовать HTTPS.

+0

Привет, Энди, я ищу такое же решение. Где хранят токен acess и обновляют токен на стороне клиента. У вас есть решение для этого? – Jenan

ответ

1

Я предлагаю вам создать таблицу в базе данных для хранения токена обновления и доступа к токену. Структура таблицы будет выглядеть ниже

ID, access_token, Refresh_Token, LastUpdated_Time

Всякий раз, когда вы вызова API с маркером доступа, пожалуйста, проверьте текущее время и LastUpdated_Time маркера, если он более одного часа ваш токен станет недействительным, поэтому вам нужно получить еще один действительный токен, используя токен обновления. В моем приложении у меня было 55 минут жизни toke, после этого токен становится недействительным.

Код

if (dateTimeDiff > 55) { 
    var request = (HttpWebRequest) WebRequest.Create("https://www.googleapis.com/oauth2/v3/token"); 
    var postData = "refresh_token=your refresh token"; 
    postData += "&client_id=your client id"; 
    postData += "&client_secret=your client secret"; 
    postData += "&grant_type=refresh_token"; 

    var data = Encoding.ASCII.GetBytes(postData); 
    request.Method = "POST"; 
    request.ContentType = "application/x-www-form-urlencoded"; 
    request.ContentLength = data.Length; 
    request.UseDefaultCredentials = true; 

    using(var stream = request.GetRequestStream()) { 
     stream.Write(data, 0, data.Length); 
    } 
    var response = (HttpWebResponse) request.GetResponse(); 
    string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd(); 

} 

Ответ будет содержать новый маркер доступа, не забудьте обновить таблицу с LastUpdated_Time и новым маркером.

0

Атрибут auth - это то, что вы всегда можете получить с помощью токена обновления. Итак, у вас есть перехватчик, который проверяет входящие и исходящие запросы и сохраняет там токен аутентификации. Прибыв на токен обновления, в нашем приложении мы сначала хранили файлы cookie, а затем переместились в локальное хранилище.

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