Аннулирование сеанса IdentityServer и токена доступа при изменении пароля пользователя - PullRequest
0 голосов
/ 29 мая 2019

Я использую IdentityServer4 в ASP.NET Core 2.2.Клиентское приложение (RP) - это API, также приложение ASP.NET Core 2.2.Пользователь входит в систему с использованием потока кода авторизации и получает файл cookie от IdentityServer (idsrv).Затем они получают код авторизации и токен доступа для API (RP).

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

            .AddCookie("MyAuthenticationScheme", options =>
            {
                options.SessionStore = new MyTicketStore();
                options.EventsType = typeof(MyCookieAuthenticationEvents);
            })

Это позволяет мне сделать недействительным сеанс пользователя IdentityServer на сервере до истечения срока действия билета аутентификации.Например, когда пользователь вошел в систему, я добавляю утверждение, в котором хранится дата последнего изменения его пароля, и в MyCookieAuthenticationEvents.ValidatePrincipal() я проверяю, что он не был изменен с тех пор, как предложено для https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?view=aspnetcore-2.2#react-to-back-end-changes

Iхочу сделать то же самое с токеном доступа, который они используют для доступа к RP.Если пароль пользователя изменился (и в некоторых других случаях), я хочу, чтобы токен доступа был признан недействительным немедленно, а не в ожидании его истечения.Я использую эталонные токены и реализовал IProfileService и ICustomTokenValidatorIProfileService.GetProfileDataAsync я копирую утверждение о дате изменения пароля в коллекцию утверждений токена доступа, а в ICustomTokenValidator.ValidateAccessTokenAsync я снова проверяю это утверждение в отношении реального пользователя.

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

1 Ответ

0 голосов
/ 29 мая 2019

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

...