Keyfactor Days 2027: participa en la conferencia sobre seguridad y confianza que se celebrará en San Diego ¡Inscríbete ya!

Azure Active Directory, ADFS 3.0 y OWIN

Keyfactor Keyfactor Technical Team
newe asp.net project

Con Windows AAD (Azure Active Directory), ADFS 3.0 (Active Directory Federation Service) y OWIN (Open Web Interface for .NET), encontrará su identidad central individual corporativa, estableciendo conexiones entre su empresa y el mundo entero para disfrutar de oportunidades ilimitadas.

Actualmente, AAD (proveedor de identidades y servidor de autorización) admite los siguientes estándares de identidad:

  1. OpenId Connect
  2. OAuth2
  3. SAML-P
  4. WS-Federation y WS-Trust
  5. API web de gráficos

ADFS 3.0 (proveedor de identidades y servidor de autorización) admite los siguientes estándares de identidad:

  1. SAML-P
  2. WS-Federation y WS-Trust
  3. OAuth2

OWIN (especificación) y Katana (MS-implementación) proporcionan componentes reutilizables para dar soporte a la autenticación y autorización de identidades basadas en estándares de la industria, como OpenId Connect, OAuth2, WS-Federation, y componentes OWIN de comunidades de terceros. El tema de OWIN y Katana es genial para leer si quieres entrar en los detalles.

Para empezar rápidamente, se podría crear una única aplicación (Web UX de modo pasivo y Web API de modo activo) con componentes reutilizables de OWIN para prestar los servicios autenticando y autorizando a los usuarios basándose en el estándar industrial de las tecnologías de identidad.

Los casos de uso para proporcionar dicho servicio dentro de esta única aplicación son los siguientes:

1. Admite autenticación pasiva y autorización basada en reclamaciones según WS-Federation. Cualquier proveedor de identidad compatible con WS-Federation, como AAD y ADFS, en esta aplicación única.

2. Soporta autenticación pasiva y autorización basada en OpenId Connect. Cualquier proveedor de identidad compatible con OpenId Connect, como AAD en esta app única.

3. Soporta autenticación pasiva y autorización para identidades sociales individuales, como Facebook, Google y Twitter en esta única aplicación.

4. Soporta autenticación activa y autorización basada en OAuth2 authorization core grant flow. Cualquier servidor de autorización compatible con OAuth2, como AAD y ADFS en esta única app.

Para este rápido get- comenzó aplicación única, basada principalmente en el artículo y artículos relacionados a través de enlaces, si te gusta entrar en los detalles.

Como ya se ha mencionado, se podría construir rápida y fácilmente una aplicación única de este tipo conectando componentes de autenticación OWIN reutilizables para implementar escenarios específicos de autenticación y autorización.

1. Cree un proyecto .NET con MVC y Web API marcados. También deje Individual User Accounts como está.

jc1

2. Instalar paquetes NuGet

PM> install-package Microsoft.IdentityModel.Protocol.Extensions –pre
PM> install-package Microsoft.Owin.Security.WsFederation –pre
PM> install-package Microsoft.Owin.Security.OpenIdConnect –pre
PM> install-package Microsoft.Owin.Security.ActiveDirectory -pre

3. Abra Startup.Auth.cs en la carpeta App_Start para conectar los componentes OWIN.

public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
// Facebook social identity provider passive flow support
app.UseFacebookAuthentication(
appId: "xxx",
appSecret: "xxx");
// Azure OpenId Connect passive authentication and authorization support
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
Client_Id = "xxx",
Authority = "https://login.windows.net/xxx.onmicrosoft.com",
,
Post_Logout_Redirect_Uri = "https://localhost:xxxxx/",
Description = new Microsoft.Owin.Security.AuthenticationDescription
{
AuthenticationType = "OpenIdConnect",
Caption = "Azue OpenId Connect"
}
});
// Azure Ws-Fed Passive federated authentication support
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
MetadataAddress = "https://login.windows.net/xxx.onmicrosoft.com/FederationMetadata/2007-06/FederationMetadata.xml",
Wtrealm = "https://myapp/wsfed",
});
// Azure OAuth2 active flow support
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Audience = "https://myapp/webapi",
Tenant = "xxx.onmicrosoft.com",
AuthenticationType = "OAuth2Bearer",
});
// ADFS OAuth2 active flow support
app.UseActiveDirectoryFederationServicesBearerAuthentication(
new ActiveDirectoryFederationServicesBearerAuthenticationOptions
{
Audience = "https://myapp/webapi",
MetadataEndpoint = "https://xxx/federationmetadata/2007-06/federationmetadata.xml"
});
}
}

CookieAuthentication y ExternalSignInCookie - Componentes de OWIN para la autenticación basada en cookies

FacebookAuthentication - Componente OWIN compatible con el flujo pasivo del proveedor de identidad social de Facebook

OpenIdConnectAuthentication - Componente OWIN compatible con la autenticación y autorización pasivas de Azure OpenId Connect

WsFederationAuthentication - Componente OWIN compatible con la autenticación federada pasiva AAD Ws-Fed

WindowsAzureActiveDirectoryBearerAuthentication - Componente OWIN para admitir la concesión de código de autorización AAD OAuth2 flujo activo

ActiveDirectoryFederationServicesBearerAuthentication - Componente OWIN para soportar el flujo activo de concesión de código de autorización ADFS OAuth2

4. Construir y Ejecutar, y haga clic en Iniciar sesión desde la página de inicio.

Verá 3 botones en "Utilizar otro servicio para iniciar sesión"

Federación - WsFederationAuthentication inicia el flujo de autenticación pasiva WS-Federation cuando el usuario hace clic en el botón.

Facebook - FacebookAuthentication inicia el flujo pasivo de inicio de sesión en Facebook.

OpenId Connect - OpenIdConnectAuthentication inicia la autenticación y autorización pasivas de Azure OpenId Connect.

jc2

5. Implementar Web UX que pueda ser consumida por el usuario a través del flujo de autenticación pasiva, como OpenId Connect, WS-Federation y Social Identity federation.

Añade el controlador seleccionando "Controlador MVC 5 - Vacío".

jc3
public class MvcValuesController : Controller {     //     // GET: /MvcValues/     public string Index()     {         if (!Request.IsAuthenticated)         {             return "You are not authenticated";         }         else         {             var ctx = Request.GetOwinContext();             ClaimsPrincipal user = ctx.Authentication.User;             return user.Identity.Name;         }     }

Una vez que inicie sesión haciendo clic en cualquier botón de "Utilizar otro servicio para iniciar sesión", acceda a https://localhost:xxxxx/mvcvalues.

6. Ahora implementar Web API que puede ser consumido por el cliente nativo a través del flujo de autenticación activa, como OAuth2 incluyendo OpenId Connect que se construye en la parte superior de OAuth2.

Añada el controlador seleccionando "Controlador Web API 2 - Vacío".

jc4
public class ValuesController : ApiController {     // GET api/values     [HostAuthentication("OAuth2Bearer")]     [Authorize]     public IEnumerable&lt;string&gt; Get()     {         return (((ClaimsPrincipal)Thread.CurrentPrincipal).Claims.Select(c =&gt; c.Value));         //return new string[] { "value1", "value2" };     } } 7. Build native client (for instance Console application) to test active flow by accessing <a href="https://localhost:xxxxx/api/values">https://localhost:xxxxx/api/values</a> class Program {     static void Main(string[] args)     {         AuthenticationContext ac =             new AuthenticationContext("https://login.windows.net/xxx.onmicrosoft.com");         AuthenticationResult ar =             ac.AcquireToken("https://myapp/webapi",                             "8d9a9a6a-xxxx-xxxx-xxxx-5d25df4d7ca0",                             new Uri("https://any"));         string result = string.Empty;         HttpClient httpClient = new HttpClient();         httpClient.DefaultRequestHeaders.Authorization =             new AuthenticationHeaderValue("Bearer", ar.AccessToken);         HttpResponseMessage response =             httpClient.GetAsync("https://localhost:xxxxx/api/values").Result;         if (response.IsSuccessStatusCode)         {             result = response.Content.ReadAsStringAsync().Result;         }         Console.WriteLine(result);         Console.ReadLine();     } }

7. Cree un cliente nativo (por ejemplo, una aplicación de consola) para probar el flujo activo accediendo a https://localhost:xxxxx/api/values.

class Program
{
    static void Main(string[] args)
    {
        AuthenticationContext ac =
            new AuthenticationContext("https://login.windows.net/xxx.onmicrosoft.com");
        AuthenticationResult ar =
            ac.AcquireToken("https://myapp/webapi",
                            "8d9a9a6a-xxxx-xxxx-xxxx-5d25df4d7ca0",
                            new Uri("https://any"));

        string result = string.Empty;
        HttpClient httpClient = new HttpClient();
        httpClient.DefaultRequestHeaders.Authorization =
            new AuthenticationHeaderValue("Bearer", ar.AccessToken);
        HttpResponseMessage response =
            httpClient.GetAsync("https://localhost:xxxxx/api/values").Result;

        if (response.IsSuccessStatusCode)
        {
            result = response.Content.ReadAsStringAsync().Result;
        }
        Console.WriteLine(result);
        Console.ReadLine();
    }
}

Suscríbase a The Source

Stay secure with Keyfactor's monthly newsletter, packed with expert insights and practical steps for quantum-readiness.

Continuar leyendo

Cyber Security And Security Password Login Online Concept
Tendencias de la industria

Preparación cuántica: Por qué el día Q es un mito y 5 medidas inmediatas

Leer más
La cultura de Keyfactor

El mayor reto en materia de seguridad no es la inteligencia artificial ni la informática cuántica, sino la confianza

Leer más
What is a certificate signing request (CSR)?
PKI

¿Qué es una Solicitud de Firma de Certificado (CSR)?

Leer más