У нас настроен IdentityServer4, и мы создали клиентские приложения на основе быстрого запуска HybridFlow и Javascript. Сервер идентификации использует AspNetIdentity, и я не понимаю, как получить доступ к пользовательским свойствам, которые НЕ являются утверждениями, такими как «AspNetUser> TwoFactorEnabled» на стороне клиента. Я мог бы найти их с помощью утверждения Sub, но не хочу, чтобы эта база данных использовалась при каждом обращении к странице.
Моим объектам OpenIdConnectAuthenticationOptions определены эти области действия
Scope = "api1 openid profile read write offline_access active_dir email"
Может ли IDS4 вернуть "TwoFactorEnabled" в качестве претензии или я упустил что-то простое? Вот как выглядит наш код startup.cs:
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
ClientId = "fake clientid",
ClientSecret = "fake secret",
Authority = _AuthConfig["BaseAddress"],
RedirectUri = _AuthConfig["ThisSiteBaseUrl"] + "/signin-oidc",
PostLogoutRedirectUri = _AuthConfig["ThisSiteBaseUrl"] + "/Home/SignOutCallback",
ResponseType = "code id_token",
Scope = "api1 openid profile read write offline_access active_dir email",
RequireHttpsMetadata = false,
TokenValidationParameters = new TokenValidationParameters()
{
NameClaimType = "name",
RoleClaimType = "role"
},
SignInAsAuthenticationType = "Cookies",
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthorizationCodeReceived = async n =>
{
// use the code to get the access and refresh token
var tokenClient = new TokenClient(
_AuthConfig["TokenEndpoint"],
"fake clientid",
"fake secret");
var tokenResponse = await tokenClient.RequestAuthorizationCodeAsync(
n.Code, n.RedirectUri);
if (tokenResponse.IsError)
{
throw new Exception(tokenResponse.Error);
}
// use the access token to retrieve claims from userinfo
var userInfoClient = new UserInfoClient( (new Uri(_AuthConfig["UserInfoEndpoint"])).ToString() );
var userInfoResponse = await userInfoClient.GetAsync(tokenResponse.AccessToken);
// create new identity
var id = new ClaimsIdentity(n.AuthenticationTicket.Identity.AuthenticationType);
id.AddClaims(userInfoResponse.Claims);
id.AddClaim(new Claim("access_token", tokenResponse.AccessToken));
: