Я пытаюсь создать приложение Угловой 6, поддерживаемое серверной частью Веб-API ASP.NET. Приложение аутентифицирует пользователей по отдельному Сервер идентификации 4, который объединяет Azure AD, в конечном итоге возвращая ссылочный токен Предъявитель.
С точки зрения входа в систему и затем аутентификации (токена) все работает. Пользователь получает доступ к сайту, перенаправляется в Azure AD, входит в систему и перенаправляется обратно в приложение Angular 6. Для вызовов API токен вводится в заголовок, а промежуточное ПО для проверки подлинности ASP.NET Core проверяет токен и возвращает данные.
services
.AddAuthentication(options => {
options.DefaultScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme;
options.DefaultAuthenticateScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme;
})
.AddIdentityServerAuthentication(options => {
options.Authority = AuthClient.SsoBaseUrl;
options.RequireHttpsMetadata = false;
options.ApiName = AuthClient.SsoClientName;
options.ApiSecret = AuthClient.SsoClientSecret;
});
Моя проблема в том, что я пытаюсь включить ASP.NET Core Identity, и я не уверен, где и как привязать claims principal
, возвращенный через AddIdentityServerAuthentication
.
В предыдущей версии (ASP.NET Framework 4.7) этого приложения мы использовали Ws-Federation
, который перенаправлялся обратно на ExternalCallbackLogin()
в AccountController
, который выполнял обычный AuthenticationManager.GetExternalLoginInfoAsync()
, затем SignInManager.ExternalSignInAsync()
, а затем (если необходимо) AppUserManager.CreateAsync()
и AppUserManager.AddLoginAsync()
.
Этот код в основном проверяет таблицу [AspNetUserLogins]
на наличие ключа поставщика (из утверждений) для сопоставления с пользователем в таблице [AspNetUsers]
.
При переходе на IdentityServer4.AccessTokenValidation
не могу понять, куда девать эту логику. Поскольку я использую ссылочные маркеры, не похоже, что JwtBearerEvents
(в частности, событие OnTokenValidated
) не возникает. На самом деле, нет выглядит так, как будто там находятся какие-либо события Introspection
... ??
Я пытался протестировать логику в тестовой конечной точке, которая вызывала вышеупомянутые методы «Менеджера» (технически он был обновлен для эквивалентных методов ASP.NET Core Identity
), но это тоже не работает.
Например, самый первый вызов SignInManager.GetExternalLoginInfoAsync()
возвращает null
.
Что я делаю не так?
Используйте OAuth2IntrospectionEvents
Возникла та же проблема. Переключение на ссылочные токены сработало отлично, но теперь мы пытаемся добавить утверждения к проверенной личности и не можем найти решение без события OnTokenValidated.