Cómo integrar Azure Active Directory con su proyecto ASP .Net Core

Javier Eduardo Mendoza Blandón
8 min readOct 2, 2023

--

English article / Artículo en inglés

Bienvenidos, esta guía tiene como objetivo enseñar una configuración básica para integrar el Azure Active Directory con un proyecto ASP .Net Core, en tan solo 19 pasos.

Requisitos:

  • Cuenta activa de Azure
  • Azure Active Directory
  • Proyecto web ASP NET
  • Conocimientos básicos de Visual Studio .NET 2022.
  • Visual Studio 2022 Versión 17.5.4.
  • Versión de Dotnet 6.0.16

¿Por qué Azure Active Directory?

Utilizar Azure Active Directory (Azure AD) para iniciar sesión en tu proyecto web ASP.NET en tu empresa puede traer varios beneficios. Aquí hay algunas razones por las que podrías considerar el uso de Azure AD:

  • Gestión centralizada de identidad y acceso
  • Escalabilidad y confiabilidad
  • Integración con el ecosistema de Microsoft
  • Amigable para los desarrolladores
  • Auditoría y cumplimiento
  • Experiencia de inicio de sesión único (SSO)
  • Funciones de seguridad y autenticación

Es importante evaluar los requisitos específicos de tu organización y determinar si Azure AD se ajusta a tus necesidades de gestión de identidad y acceso.

Comencemos con esta guía

Paso 0: Si no tienes ningún proyecto web ASP Net, puedes aprender cómo crear uno con este tutorial en video. De lo contrario, puedes omitir este paso.

Paso 1: Escribe ‘Azure Active Directory’ en el cuadro de búsqueda:

Paso 2: Busca en las opciones laterales: Administrar => Registros de aplicaciones.

Paso 3: Haz clic en el botón de opción: +Nueva inscripción.

Paso 4: Elige un nombre representativo con un -ad al final”.

Si todo va bien, podrías tener una pantalla similar a esta.

Paso 5: Necesitaras escribir los siguientes datos de la última pantalla, ya que requerirás esta información.

"AzureAd": {

"Instance": "https://login.microsoftonline.com/",

"Domain": "<domain>.onmicrosoft.com",

"TenantId": "<tenantId>",

"ClientId": "<clientId>",

"CallbackPath": "/signin-oidc"

}
Puedes encontrar el dominio de tu Active Directory de Azure en la opción de Resumen.

Paso 6: Busca en las opciones laterales: Administrar => Autenticación.

Paso 7: Después de hacer clic allí, deberás agregar lo siguiente: URI de redireccionamiento web adicionales, URL de cierre de sesión del canal frontal, marca la casilla de tokens de ID, elige cuentas en esta organización y finalmente guarda.

añade ‘signin-oidc’ a la URL

‘Web => Redirect URIs’ es donde necesitarás agregar las URL de cada uno de tus entornos diferentes para tu aplicación, por ejemplo: desarrollo, etapa y producción.

Otro ejemplo podría ser el paso #19

Paso 8: Abramos nuestro proyecto web ASP Net y agreguemos los siguientes tres paquetes NuGet:

Microsoft.AspNetCore.Authentication.AzureAd.UI

Microsoft.Identity.Web

Microsoft.Identity.Web.UI

Paso 9: Agreguemos en el archivo appsettings.json la información sobre la configuración del Azure AD que guardaste previamente en el paso #5.

asegurándonos de utilizar la configuración correcta.

Las configuraciones proporcionadas en la sección ‘AzureAd’ incluyen:

“Instance”: La URL de la autoridad de Azure AD, donde los usuarios se autenticarán.

“ClientId”: El ID del cliente de la aplicación registrada en Azure AD, que representa tu aplicación.

“TenantId”: El ID del inquilino de Azure AD al que pertenece tu aplicación.

“CallbackPath”: La URL a la que se enviará la respuesta de autenticación después de un inicio de sesión exitoso.

Paso 10: Agreguemos el siguiente código en la clase Program.cs, parte 1.

// paso 10.1
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"));


// paso 10.2
builder.Services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
});


// paso 10.3
builder.Services.AddRazorPages().AddMicrosoftIdentityUI();

Paso 10.1: En este paso, estamos configurando la autenticación para la aplicación ASP.NET Core utilizando Azure Active Directory (Azure AD) como proveedor de identidad.

Paso 10.2: En este paso, estamos habilitando la autorización para los controladores de la aplicación. El método AddControllersWithViews configura la aplicación ASP.NET Core para usar controladores con vistas para manejar las solicitudes HTTP.

Paso 10.3: En este paso, estamos habilitando las páginas Razor para la aplicación con la integración de Microsoft Identity UI. El método AddRazorPages configura el soporte de páginas Razor en la aplicación ASP.NET Core.

Paso 11: Agreguemos el siguiente código en la clase Program.cs, parte 2

// paso 11.1
app.UseAuthentication();

// paso 11.2
app.MapRazorPages();

Paso 11.1: En este paso, estamos habilitando el middleware de autenticación para la aplicación ASP.NET Core. El método UseAuthentication se utiliza para habilitar el middleware de autenticación en el flujo de procesamiento de solicitudes de la aplicación.

Paso 11.2: En este paso, estamos mapeando las rutas de las páginas Razor en la aplicación ASP.NET Core. El método MapRazorPages se utiliza para configurar el enrutamiento de las páginas Razor.

Paso 12: Agreguemos la propiedad [Authorize] a todos aquellos controladores que deseamos proteger.

Puede ser en cualquier controller que desees, para este ejercicio será este.
[Authorize]

Paso 13: Creemos la siguiente clase de modelo “UserAzureAD” para obtener algunos datos sobre tu usuario desde tu Azure AD después de autenticarse.

public class UserAzureAD
{
public string user_name { get; set; }
public string user_domain { get; set; }
public string user_email { get; set; }
}

Paso 14: Creemos un método para llenar el objeto creado anteriormente utilizando la clase ClaimsPrincipal.

/// <summary>
/// Obtenga el nombre de usuario, el dominio de usuario y el correo electrónico del usuario de los reclamos de autenticación
/// </summary>
/// <param name="user">Claims Autenticacion</param>
/// <returns>Azure AD</returns>
public static UserAzureAD GetUserOnAzureAd(ClaimsPrincipal user)
{
var preferredUsernameClaim = user.Claims.FirstOrDefault(c => c.Type.Equals("preferred_username"));
if (preferredUsernameClaim != null)
{
return new UserAzureAD
{
user_name = user.Claims.FirstOrDefault(p => p.Type.Equals("name")).Value,
user_email = preferredUsernameClaim.Value,
user_domain = string.Format(@"cpiccr\{0}", preferredUsernameClaim.Value.Split('@')[0])
};
}
return null; // O lanzar una excepción si se requiere el reclamo de nombre de usuario preferido
}

Paso 15: Implementemos el método creado anteriormente para obtener los datos del usuario autenticado en Azure AD.

Puede ser en cualquier vista que desees, para este ejercicio será esta.
@using WebAppWithAD.Controllers

<hr/>
@if (User.Identity.IsAuthenticated)
{
var getUser = @HomeController.GetUserOnAzureAd(User);

<h4> Azure AD User name: @getUser.user_name </h4>
<h4> Azure AD Email: @getUser.user_email </h4>
<h4> Azure AD User domain: @getUser.user_domain</h4>

<a class="nav-link" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">
Sign Out (X)
</a>
}

Parece que todo está listo para probar.

Paso 16: Probemos nuestra implementación local para verificar si nuestra integración con Azure AD está funcionando como se espera.

Recuerda utilizar tu correo electrónico empresarial asociado a tu cuenta de Azure AD.
Si observas en ‘NewWebsite.ad’, es el mismo configurado que se realizó en el paso #4 anteriormente.
Parece que todo ha salido bien, localmente.

Paso 17: Probemos si la funcionalidad de “Cerrar sesión” está funcionando como se espera.

Esta funcionando bien.

Paso 18: Probemos si la funcionalidad de “Iniciar sesión” está funcionando como se espera.

Puede ser en cualquier vista que desees, para este ejercicio será esta.

agrega el siguiente código.

      @if (!User.Identity.IsAuthenticated)
{
<li class="nav-item">
<a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Iniciar sesión</a>
</li>
}

Compila, ejecuta el código y repite el paso #16

Deberias poder ver el inicio de sesion

Paso 19: Vamos a implementar / desplegar el proyecto en Azure App Service con Azure Cloud para verificar si todo continuará funcionando como se espera.

Si aún no tienes uno, aquí está la documentación oficial de cómo hacerlo:

después de la implementación, verás la siguiente pantalla

Por lo tanto, deberás repetir estos pasos: #2, #6 y #7, pero con la URL de tu servicio de aplicaciones de Azure o el dominio predeterminado.

Lo mismo que el paso #7 pero con la URL del App Service de Azure.

Guarda y después de hacer esto, actualiza el sitio web y repite este paso: #17.

Por favor, intenta probar los siguientes pasos: #17 y #18 por ti mismo para verificar que todo está funcionando como se espera en el sitio web de Azure.

Parece que todo está funcionando como se esperaba después de completar la integración del Directorio Activo de Azure con un proyecto de ASP .Net Core. Ha sido exitoso en entornos locales y en la nube. Aquí tienes el repositorio público por si deseas echar un vistazo:

Por favor, déjame saber tus comentarios, ya que puedo crecer con ellos. Muchas gracias.

--

--