Возможно ли выставить штамп безопасности из Asp.Net Core Identity в качестве требования для OIDC

#asp.net-core #identityserver4 #asp.net-core-identity #openid-connect

#asp.net-core #identityserver4 #asp.net-core-identity #OpenID-connect

Вопрос:

Я использую IdentityServer4 with Asp.Net Core Identity и я хотел бы проверить в моем клиенте MVC (который подключен к IdentityServer4), что пользовательский SecurityStamp изменился.

Моя идея заключается в том, чтобы выставить SecurityStamp как утверждение в id_token и проверить его в моем клиенте MVC в каком-нибудь событии в Cookie промежуточном программном обеспечении.

Если штамп безопасности пользователя изменился, то необходимо будет войти в систему снова.

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

1) Правильно ли выставлять SecurityStamp подобное утверждение?

2) Есть ли что-нибудь, как проверить, действителен ли штамп безопасности пользователя в OIDC? Или для этого необходимо создать мою собственную конечную точку? Нравится собственный API?

Ответ №1:

Мы сделали это, и это работает хорошо. Я возвращаю его как st утверждение в токенах, а также через конечную точку user info, чтобы клиентам было легко проверить, изменилось ли оно.

Затем мы ввели требование, чтобы (внутренние) клиенты периодически проверяли через конечную точку userinfo, которая st не изменилась. У нас также есть пользовательская реализация олицетворения, и клиенты проверяют отзыв разрешения на олицетворение таким же образом.

Итак, вкратце — да, это хорошая идея (IMO) и нет, вам не нужно создавать API — просто выставляйте его через конечную точку userinfo.

Комментарии:

1. не могли бы вы, пожалуйста, поделиться некоторыми деталями реализации? Особенно, как вы проверяете утверждение st в клиентской части? Какое событие в промежуточном программном обеспечении Cookie вы используете? Спасибо.

2. @jenan вы когда-нибудь заставляли это работать самостоятельно, как вы гарантируете, что штамп безопасности отправляется в конечную точку userinfo?

3. @Phil Я только что расширил DefaultClaimsService, чтобы добавить свои собственные утверждения, и внедрил свой собственный IUserInfoResponseGenerator, который делает то же самое.

4. @mackie как вы внедрили свой пользовательский IUserInfoResponseGenerator в службы сервера идентификации?

5. @Phil если вы зарегистрируете его при запуске сразу после регистрации IdentityServer4, то новая привязка перезапишет значение по умолчанию. т.е.: services.AddTransient<IUserInfoResponseGenerator, CustomUserInfoResponseGenerator>();