c# - ejemplos - identity server 4 asp.net core 2
¿Cómo agregar notificaciones personalizadas para acceder al token en IdentityServer4? (4)
Ok, el problema aquí es este:
A pesar de que ha configurado correctamente sus recursos de Identidad disponibles (tanto estándar como personalizados), también necesita definir explícitamente cuáles son una necesidad al llamar a su recurso de API . Para definir esto, debe ir a su clase ExampleIdentityServer
proyecto ExampleIdentityServer
y proporcionar un tercer argumento como en el new ApiResouirce
constructor new ApiResouirce
. Solo esos serán incluidos en el access_token
// scopes define the API resources in your system
public static IEnumerable<ApiResource> GetApiResources()
{
return new List<ApiResource>
{
new ApiResource("api1", "My API", new[] { JwtClaimTypes.Subject, JwtClaimTypes.Email, JwtClaimTypes.Phone, etc... })
};
}
En esencia, esto significa que configuré mis notificaciones de identidad para mi organización, pero puede haber más de una API involucrada y no todas las API hacen uso de todas las notificaciones de perfil disponibles. Esto también significa que estos estarán presentes dentro de su ClaimsPrincipal
todo el resto todavía se puede acceder a través del punto final "userinfo" como una llamada http normal.
NOTA: con respecto a los tokens de actualización:
Si eligió habilitar los tokens de actualización a través de AllowOfflineAccess = true
, puede experimentar el mismo comportamiento al actualizar el access_token "¡ GetProfileDataAsync no se ejecuta! ". Por lo tanto, las reclamaciones dentro de access_token siguen siendo las mismas, aunque se obtiene un nuevo access_token con una vida útil actualizada. Si ese es el caso, puede forzarlos a que siempre se actualicen desde el servicio de Perfil configurando UpdateAccessTokenClaimsOnRefresh=true
en la configuración del cliente.
Estoy usando IdentityServer4 .
Quiero agregar otras notificaciones personalizadas para acceder al token pero no puedo hacer esto. He modificado Quickstart5 y he agregado ASP.NET Identity Core y las notificaciones personalizadas a través de ProfileService como se sugiere en Coemgen a below .
Puede descargar mi código aquí: [paquete zip] [3]. (Se basa en: Quickstart5 con ASP.NET Identity Core y reclamaciones agregadas a través de ProfileService).
Problema: GetProfileDataAsync no se ejecuta.
Debes implementar tu propio ProfileService. Eche un vistazo en esta publicación que seguí cuando implementé la misma: https://damienbod.com/2016/11/18/extending-identity-in-identityserver4-to-manage-users-in-asp-net-core/
Aquí hay un ejemplo de mi propia implementación:
public class ProfileService : IProfileService
{
protected UserManager<ApplicationUser> _userManager;
public ProfileService(UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
}
public async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
//>Processing
var user = await _userManager.GetUserAsync(context.Subject);
var claims = new List<Claim>
{
new Claim("FullName", user.FullName),
};
context.IssuedClaims.AddRange(claims);
}
public async Task IsActiveAsync(IsActiveContext context)
{
//>Processing
var user = await _userManager.GetUserAsync(context.Subject);
context.IsActive = (user != null) && user.IsActive;
}
}
No olvides añadir esta línea en tu Startup.cs.
services.AddTransient<IProfileService, ProfileService>();
Problema encontrado.
En startup.cs en lugar de agregar "services.AddTransient ();"
Agregue ".AddProfileService ()" a services.AddIdentityServer ()
Terminarás con
services.AddIdentityServer()
.AddTemporarySigningCredential()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryClients(Config.GetClients())
.AddAspNetIdentity<ApplicationUser>()
.AddProfileService<ProfileService>();
Gracias por ayudar a Coemgen! No hay nada malo con el código, solo el inicio fue incorrecto.
Puede incluir cualquier reclamación usando la opción UserClaims en su GetIdentityResources () en la clase de configuración:
Reclamaciones de usuarios: lista de tipos de reclamaciones de usuarios asociados que deben incluirse en el token de identidad. (Según la documentación oficial) http://docs.identityserver.io/en/release/reference/identity_resource.html#refidentityresource