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
}));
}
¿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
y debemos cargar el token en el input anteponiendo la palabra Bearer
Dando click en Authorize
, se incluirá automáticamente el token en los headers de nuestras peticiones.
Postman¶
Para enviar el token desde Postman debemos dirigirnos a la pestaña Auth
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.