Cómo implementar el servidor oauth2 en ASP.NET MVC 5 y API WEB 2

Primero esbozaré mi proyecto:

Para mi barco interno, necesito agregar funcionalidad a un sistema existente. Un cliente externo debe poder acceder a los datos de los servicios web de AX una vez que el usuario lo haya autorizado a través de oauth2. Entiendo que necesito hacer un ‘servicio web proxy’ para que el cliente pueda hacer sus llamadas y que llame a los servicios de AX pero no estoy seguro acerca de la parte oauth2. La mayoría de los tutoriales y guías tratan sobre el uso de la identidad de ASP.NET para los inicios de sesión de Facebook o Google. No necesito eso, necesito usar credenciales existentes, así que necesito hacer mi propio servicio oauth2.

Me resulta difícil encontrar tutoriales, guías o explicaciones sobre esto. Entiendo oauth2 y lo que se necesita hacer, pero nunca antes había hecho algo así y me resulta difícil comenzar. Lo más parecido a lo que necesito que encontré es este enlace github repo , pero la solución no se construye.

Lo que tenía en mente es crear un sitio web ASP.NET MVC donde los clientes (terceros) puedan registrarse y adquirir sus ID de cliente. Con la API de ASP.NET, quería crear la API que toma los tokens y parámetros necesarios, y luego acceder a los servicios de Dyn AX.

¿Es correcto o estoy completamente equivocado? Cualquier ayuda o enlace relacionado con la construcción de su propio servidor / servicio oauth2 sería agradable.

Hay una publicación de blog shiny de Taiseer Joudeh con una descripción detallada paso a paso.

  1. Parte 1: Autenticación basada en tokens utilizando ASP.NET Web API 2, Owin e Identity
  2. Parte 2: Autenticación de Token AngularJS utilizando ASP.NET Web API 2, Owin e Identity
  3. Parte 3: habilite los tokens de actualización OAuth en la aplicación AngularJS utilizando ASP.NET Web API 2 y Owin
  4. Parte 4: ASP.NET Web API 2 inicios de sesión externos con Facebook y Google en la aplicación AngularJS
  5. Parte 5: Desacoplar el servidor de autorizaciones OWIN del servidor de recursos

También me costó encontrar artículos sobre cómo generar la parte del token. Nunca encontré uno y escribí el mío. Entonces, si ayuda:

Las cosas para hacer son:

  • Crea una nueva aplicación web
  • Instale los siguientes paquetes NuGet:
    • Microsoft.Owin
    • Microsoft.Owin.Host.SystemWeb
    • Microsoft.Owin.Security.OAuth
    • Microsoft.AspNet.Identity.Owin
  • Agregue una clase de startup OWIN

A continuación, cree un archivo HTML y un archivo JavaScript ( index.js ) con estos contenidos:

 var loginData = 'grant_type=password&username=test.test@mail.com&password=test123'; var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState === 4 && xmlhttp.status === 200) { alert(xmlhttp.responseText); } } xmlhttp.open("POST", "/token", true); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.send(loginData); 
          

La clase de startup OWIN debe tener este contenido:

 using System; using System.Security.Claims; using Microsoft.Owin; using Microsoft.Owin.Security.OAuth; using OAuth20; using Owin; [assembly: OwinStartup(typeof(Startup))] namespace OAuth20 { public class Startup { public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; } public void Configuration(IAppBuilder app) { OAuthOptions = new OAuthAuthorizationServerOptions() { TokenEndpointPath = new PathString("/token"), Provider = new OAuthAuthorizationServerProvider() { OnValidateClientAuthentication = async (context) => { context.Validated(); }, OnGrantResourceOwnerCredentials = async (context) => { if (context.UserName == "test.test@mail.com" && context.Password == "test123") { ClaimsIdentity oAuthIdentity = new ClaimsIdentity(context.Options.AuthenticationType); context.Validated(oAuthIdentity); } } }, AllowInsecureHttp = true, AccessTokenExpireTimeSpan = TimeSpan.FromDays(1) }; app.UseOAuthBearerTokens(OAuthOptions); } } } 

Ejecute su proyecto. El token se debe mostrar en la ventana emergente.

Estoy investigando lo mismo y tropecé con el servidor de identidad que implementa OAuth y OpenID sobre ASP.NET. Se integra con ASP.NET identidad y Membership Reboot con soporte de persistencia para Entity Framework.

Por lo tanto, para responder a su pregunta, consulte su documento detallado sobre cómo configurar un servidor OAuth y OpenID .

Gmail: OAuth

  • Ir al enlace
  • Inicie sesión con su contraseña de usuario de Gmail
  • Haga clic en el menú de google en la parte superior izquierda
  • Haga clic en Administrador de API
  • Haga clic en Credenciales
  • Haga clic en Crear credenciales y seleccione Cliente OAuth
  • Seleccione Aplicación web como Tipo de aplicación e Ingrese el nombre-> Ingresar URL autorizada de redireccionamiento (por ejemplo: http: // localhost: 53922 / signin-google ) -> Haga clic en el botón Crear. Esto creará las credenciales. Pls anote la Client ID del Client ID y la Secret ID . Finalmente, haz clic en Aceptar para cerrar las credenciales emergentes.
  • El siguiente paso importante es habilitar Google API . Haga clic en Resumen en el panel izquierdo.
  • Haga clic en la Google API en la sección de API sociales.
  • Haga clic en Habilitar

Eso es todo de la parte de Google.

Regrese a su aplicación, abra App_start/Startup.Auth.cs y elimine el comentario del siguiente fragmento

  app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() { ClientId = "", ClientSecret = "" }); 

Actualice ClientId y ClientSecret con los valores de Google API credenciales de la Google API que ya ha creado.

  • Ejecute su aplicación
  • Haga clic en Iniciar
  • Verá el botón Google en la sección “Usar otra sección para iniciar sesión”
  • Haga clic en el botón Google
  • La aplicación le pedirá que ingrese el nombre de usuario y la contraseña
  • Ingrese el nombre de usuario y la contraseña de gmail y haga clic en Iniciar sesión
  • Esto realizará OAuth y volverá a su aplicación y le pedirá que se registre con la ID de Gmail .
  • Haga clic en Registrarse para registrar la ID de Gmail en la base de datos de su aplicación.
  • Verás que los detalles de identidad aparecen en la parte superior como registro normal
  • Pruebe cerrar la sesión e inicie sesión de nuevo a través de Gmail. Esto lo registrará automáticamente en la aplicación.