Доступ к свойствам пользователя из HybridFlow Client & IdentityServer4 - PullRequest
0 голосов
/ 16 ноября 2018

У нас настроен 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));
:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...