В моем приложении Api 2 Identity 2 после регистрации пользователя У меня есть одна запись в одной таблице: AspNetUsers. Я использую следующий запрос HTTP, чтобы получить маркер:Где находится информация о токене авторизации, хранящемся на сервере ASP.NET WEB API?
POST https://localhost:44304/Token HTTP/1.1
Accept: application/json
Content-type: application/x-www-form-urlencoded
Accept-Encoding: gzip
Content-Length: 68
Host: localhost:44304
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
grant_type=password&[email protected]&password=123456
и я получаю ответ с access_token:
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 695
Content-Type: application/json;charset=UTF-8
Expires: -1
Server: Microsoft-IIS/8.0
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcU2VyZ2V5XERvY3VtZW50c1xWaXN1YWwgU3R1ZGlvIDIwMTNcUHJvamVjdHNcbXZjX3dlYmFwaVxXZWJBcHBsaWNhdGlvblxXZWJBcHBsaWNhdGlvblxUb2tlbg==?=
X-Powered-By: ASP.NET
Date: Tue, 25 Nov 2014 17:40:07 GMT
{"access_token":"gsvW23e1...}
После того как я получил маркер не один рекорд не будет добавлен в базу данных. Тем не менее в таблице AspNetUsers есть только одна запись. Информация о выпущенном токене не хранится в любой таблице базы данных.
Я использую следующий код в контроллере Web API для аутентификации пользователя:
var currentUser = manager.FindById(User.Identity.GetUserId());
if (currentUser == null)
{
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
return ResponseMessage(response);
}
После этого я выполнить изменение пароля и пытаюсь вызвать некоторый веб-апите метод контроллера, используя старую access_token (который я получил до смены пароля) и access_token остается в силе! CurrentUser не является нулевым! Я прочитал еще темы на StackOverflow ASP.Net Identity sign-out all sessions ASP.Net Identity Logout и BlogPost https://timmlotter.com/blog/asp-net-identity-invalidate-all-sessions-on-securitystamp-update/ , но я до сих пор не понимаю, где хранится информация о выданных жетонов. Итак, мои вопросы: 1) Где хранится информация о access_token на сервере? 2) Почему после смены пароля я все еще могу использовать access_token, который выдается сервером до смены пароля? 3) Как аннулировать все access_token, выпущенные до смены пароля?
После изменения пароля поле SecurityStamp изменяется. Но диспетчер вызовов. FindById (User.Identity.GetUserId()) по-прежнему возвращает NOT null, когда я вызываю некоторый метод контроллера web-api со старым маркером-носителем Авторизация: Bearer gsvW23e1 ... Я думаю, что manager.FindById (User.Identity.GetUserId()) должен возвращать значение null после смены пароля (SecurityStamp change), если я пытаюсь вызвать метод web api, используя старый (выданный до изменения пароля) токен-носитель для авторизации. – Sergey