Я использую IdentityServer3 с IdentityServer3.AspNetIdentity с помощью клиента OpenId, я могу успешно пройти аутентификацию, однако претензии, содержащиеся в таблице AspNetUserClaims, не отправляются клиенту. IdentityServer сконфигурирован как:IdentityServer AspNetIdentity AspNetUserClaim не заполняется на клиенте
- Hybrid Flow
- Всегда Отправить Претензии клиента верно
- Области применения: Вконтакте профиля
Я добавил пользовательский класс, основанный на 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.
Может ли кто-нибудь помочь?