Saltar a contenido

Autentication

Securización de API con Azure AD B2C

Para poder segurizar nuestros endpoint con Azure AD B2C, debemos tener instalado la librería Andreani.ARQ.WebHost --version <= 1.0.10

Configuración AzureB2C

Ver en WebHost configuración Azure AD B2C

Configuración AzureAD

Ver en WebHost configuración Azure AD

¿Cómo segurizar un endpoint?

Para segurizar un endpoint debemos agregar la etiqueta de atributo Authorize en nuestros Controllers.

Atributo

[Authorize(AuthenticationSchemes = WebHostConstants.AzureAdB2cAuthenticationScheme)]

ASPNET nos permite segurizar un endpoint en particular o todos los endpoint de un controller.

Para segurizar todos los métodos de un controller debemos agregar el atributo a la clase.

    [ApiController]
    [ApiVersion("1.0")]
    [Route("api/v{version:apiVersion}/[controller]")]
    [Authorize(AuthenticationSchemes = WebHostConstants.AzureAdB2cAuthenticationScheme)]
    public class PersonController : ControllerBase
    {
        private readonly IMediator _mediator;
        public PersonController(IMediator mediator)
        {
            _mediator = mediator;
        }
    }

En caso de solo segurizar un endpoint o un conjunto de endpoints dentro de un mismo controller se debe agregar el atributo en los métodos correspondientes.

        [HttpPost]
        [ProducesResponseType(typeof(CreatePersonResponse), StatusCodes.Status201Created)]
        [ProducesResponseType(typeof(List<Notify>), StatusCodes.Status400BadRequest)]
        [Authorize(AuthenticationSchemes = WebHostConstants.AzureAdB2cAuthenticationScheme)]
        public async Task<IActionResult> Create(CreatePersonCommand body) => this.Result(await _mediator.Send(body));

¿Cómo obtengo la información del JWT?

Para acceder a los Claims del Token, disponemos del Atributo User que corresponde a la clase ClaimsPrincipal que es enriquecido cuando tenemos configurado la autenticación, este atributo se encuentra en ControllerBase

        [HttpPut("{id}")]
        [Authorize(AuthenticationSchemes = WebHostConstants.AzureAdB2cAuthenticationScheme)]
        public async Task<IActionResult> Update(string id, UpdatePersonVm body)
        {
            // User se enriquece con los datos del token.
            var Claims = User.Claims;
            return this.Result(await _mediator.Send(new UpdatePersonCommand
            {
                PersonId = id,
                Apellido = body.Apellido,
                Nombre = body.Nombre
            }));
        }
Ejemplo

Azure b2c

¿Cómo pruebo mi API?

En caso de tener APIs securizadas debemos enviar el token por Header en la key Authorization.

Swagger

Para enviar el token a través de la documentación de Swagger, debemos dirigirnos al apartado Authorize

Azure b2c

y debemos cargar el token en el input anteponiendo la palabra Bearer

Azure b2c

Dando click en Authorize, se incluirá automáticamente el token en los headers de nuestras peticiones.

Azure b2c

Postman

Para enviar el token desde Postman debemos dirigirnos a la pestaña Auth

Azure b2c

Azure b2c

Se debe seleccionar la opción Bearer Token y cargar el token en el input de Token.

Postman incluirá el token en cada petición que realizemos.