2017-02-14 17 views
0

Я использую IdentityServer3 с IdentityServer3.AspNetIdentity с помощью клиента OpenId, я могу успешно пройти аутентификацию, однако претензии, содержащиеся в таблице AspNetUserClaims, не отправляются клиенту. IdentityServer сконфигурирован как:IdentityServer AspNetIdentity AspNetUserClaim не заполняется на клиенте

  1. Hybrid Flow
  2. Всегда Отправить Претензии клиента верно
  3. Области применения: Вконтакте профиля

Я добавил пользовательский класс, основанный на AspNetIdentityUserService и переопределить метод GetClaimsFromAccount. Я предоставил ту же реализацию, что и оригинал (https://github.com/IdentityServer/IdentityServer3.AspNetIdentity/blob/master/source/IdentityServer3.AspNetIdentity/IdentityServer3.AspNetIdentity.cs), и установил точку останова - я могу видеть все претензии, содержащиеся в AspNetUserClaims, однако они не включены в коллекцию Claims на клиенте.

Мой клиент код:

OpenIdConnectAuthenticationOptions openIdConnectAuthenticationOptions = new OpenIdConnectAuthenticationOptions 
      { 
       //BackchannelTimeout = TimeSpan.FromMinutes(sessionTimeoutInMinutes), 
       ClientId = "xxx", 
       Authority = "https://xxx/core", 
       PostLogoutRedirectUri = "https://localhost:44304", 
       ResponseType = "code id_token token", 
       Scope = "openid profile email", 
       Notifications = new OpenIdConnectAuthenticationNotifications() 
       { 
        SecurityTokenValidated = async (context) => 
        { 
         //string userId = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.Name).Value; 
         var id_token = context.ProtocolMessage.IdToken; 

         var abc = new JwtSecurityToken(id_token); 

         var def = abc.Claims; 

         List<Claim> claims = new List<Claim>(); 

         UserInfoClient userInfoClient = new UserInfoClient(new Uri("https://shaves2u.azurewebsites.net/core/connect/userinfo"), context.ProtocolMessage.AccessToken); 

         var userInfo = await userInfoClient.GetAsync(); 
         userInfo.Claims.ToList().ForEach(ui => claims.Add(new Claim(ui.Item1, ui.Item2))); 

         return; 

         //return Task.FromResult(0); 
        }, 
        RedirectToIdentityProvider = (context) => 
        { 
         string appBaseUrl = context.Request.Scheme + "://" + context.Request.Host + context.Request.PathBase; 
         context.ProtocolMessage.RedirectUri = appBaseUrl + "/"; 
         context.ProtocolMessage.PostLogoutRedirectUri = appBaseUrl + "/"; 

         if (context.ProtocolMessage.RequestType == OpenIdConnectRequestType.LogoutRequest) 
         { 
          Claim idTokenHint = context.OwinContext.Authentication.User.FindFirst("id_token"); 

          if (idTokenHint != null) 
          { 
           context.ProtocolMessage.IdTokenHint = idTokenHint.Value; 
          } 
         } 

         return Task.FromResult(0); 
        }, 
        AuthorizationCodeReceived = (context) => 
        { 
         ClaimsIdentity identity = context.AuthenticationTicket.Identity; 

         identity.AddClaim(new Claim("id_token", context.ProtocolMessage.IdToken)); 

         context.AuthenticationTicket = new Microsoft.Owin.Security.AuthenticationTicket(identity, context.AuthenticationTicket.Properties); 

         return Task.FromResult(0); 
        }, 
        AuthenticationFailed = (context) => 
        { 
         if (context.Exception.Message.StartsWith("OICE_20004") || context.Exception.Message.Contains("IDX10311")) 
         { 
          context.SkipToNextMiddleware(); 
          return Task.FromResult(0); 
         } 
         return Task.FromResult(0); 
        } 
       } 
      }; 

Из кода abc.Claims не содержит каких-либо претензий со стороны AspNetUserClaims и не делает userInfo.Claims.

Может ли кто-нибудь помочь?

ответ

1

Для всех, кто испытывает ту же проблему, я хотел бы поделиться своим решением. В конце концов это оказалось настройкой конфигурации. Установка для IncludeAllClaimsForUser значения true для области. Я создал новую область для моего приложения, однако установка этого свойства в области профиля также должна работать.

 Смежные вопросы

  • Нет связанных вопросов^_^