Использование таблицы AspNetUserTokens для хранения токена обновления в ASP.NET Core Web Api - PullRequest
0 голосов
/ 06 декабря 2018

Я работаю с приложением ASP.NET Core Web API.Я пытаюсь реализовать аутентификацию на основе токенов JWT поверх удостоверения ASP.NET (встроенного в таблицы базы данных).

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

https://www.blinkingcaret.com/2018/05/30/refresh-tokens-in-asp-net-core-web-api/

https://www.c -sharpcorner.com / article / handle-refresh-token-using-asp-net-core-2-0-and-json-web-token /

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

Мой вопрос: если кто-то использовал AspNetUserTokens для хранения маркера обновления, пожалуйста, поделитесь идеей, поскольку класс usermanager не предоставляет прямоймодель токена (AspNetUserTokens) и не уверен, что я использую IdentityDbContext, каковы преимущества и недостатки?Я реализовал IdentityDbContext, но я не вижу встроенного класса в Microsoft.AspNetCore.Identity для хранения токена в AspNetUserTokens

Буду очень признателен за некоторые рекомендации.

Спасибо

1 Ответ

0 голосов
/ 07 декабря 2018

Я прямо отвечу на ваш вопрос и предложу альтернативу.Вы можете удалить, установить, получить и проверить токены с помощью таблицы AspNetUserTokens.Однако вы, вероятно, можете пропустить базу данных, и я опишу это ниже.

Следующие методы UserManager сгенерируют и сохранят:

await _userManager.RemoveAuthenticationTokenAsync(user, "MyApp", "RefreshToken");
var newRefreshToken = await _userManager.GenerateUserTokenAsync(user, "MyApp", "RefreshToken");
await _userManager.SetAuthenticationTokenAsync(user, "MyApp", "RefreshToken", newRefreshToken);

Следующие методы UserManager получати подтвердите:

var refreshToken = await _userManager.GetAuthenticationTokenAsync(user, "MyApp", "RefreshToken");
var isValid = await _userManager.VerifyUserTokenAsync(user, "MyApp", "RefreshToken", refreshToken );

Вам нужно будет настроить такого провайдера, используя IdentityBuilder при запуске.

identity.AddTokenProvider("MyApp", typeof(DataProtectorTokenProvider<User>)

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

_userManager.UpdateSecurityStampAsync(user);
...