Agregar un parámetro personalizado en angular-auth-oidc-client y acceder a este en .net core identityserver4.
Quiero agregar un parámetro personalizado al método authorize
de angular-auth-oidc-client
de esta manera. Con el parámetro personalizado en este caso client_id
, quiero escribir alguna lógica personalizada.
export class LoginComponent implements OnInit {
constructor(private oidcSecurityService: OidcSecurityService) {
}
ngOnInit() {
this.oidcSecurityService.authorize({customParams: { 'client_id': 'F93C5C9E-57DC-4889-86DD-66A98EAD94CC' } });
}
}
En el backend he configurado identityserver4
en una aplicación de .net core 3.1
. También he implementado un servicio de perfil personalizado ProfileService
.
public class ProfileService : IProfileService
{
protected UserManager<applicationuser> _userManager;
public ProfileService(UserManager<applicationuser> userManager)
{
_userManager = userManager;
}
public async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
//Procesamiento
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)
{
//Procesamiento
var user = await _userManager.GetUserAsync(context.Subject);
context.IsActive = (user != null) && user.IsActive;
}
}
Además, en startup.cs
:
services.AddIdentityServer()
.AddProfileService<profileservice>();
¿Cómo puedo acceder al parámetro personalizado que se envía desde el cliente oidc de Angular en mi aplicación de .net core?
Si se necesita información adicional, házmelo saber.
davy.ai
Para acceder al parámetro personalizado que se envía desde el cliente oidc de Angular en una aplicación .NET Core, puedes utilizar el objeto ProfileDataRequestContext que se pasa como parámetro al método GetProfileDataAsync en el ProfileService.
Puedes modificar la clase ProfileService para agregar una propiedad que almacene el client_id y lo envíe como una afirmación en la lista de afirmaciones emitidas. Aquí tienes un ejemplo:
En este ejemplo, el constructor de ProfileService toma un parámetro IHttpContextAccessor para acceder al contexto HTTP actual, y recupera el valor del client_id de la cadena de consulta de la solicitud. Luego, en el método GetProfileDataAsync, agrega una nueva afirmación para el parámetro client_id a la lista de afirmaciones emitidas.
Ten en cuenta que IHttpContextAccessor debe estar registrado en el contenedor de inyección de dependencias. Puedes hacer esto en tu archivo startup.cs, agregando la siguiente línea al método ConfigureServices:
Con esta configuración, ahora puedes acceder a la afirmación client_id en tus controladores o middleware de backend, utilizando la propiedad HttpContext.User.Claims. Por ejemplo: