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


Primero esbozaré mi proyecto:

Para mi nave interna necesito agregar funcionalidad a un sistema existente. Un cliente de terceros debe poder acceder a los datos de AX web services una vez que haya sido autorizado por el usuario a través de oauth2. Entiendo que necesito hacer un' proxy web service ' donde el cliente puede hacer sus llamadas y que llama a los servicios de AX, pero estoy un poco inseguro acerca de la parte oauth2. La mayoría de los tutoriales y guías son sobre el uso ASP.NET Identidad de los inicios de sesión de facebook o Google. Me 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 hay que hacer, pero nunca he hecho tal cosa antes y me resulta difícil comenzar. Lo más cercano a lo que necesito que encontré es este enlace de repositorio de github, pero la solución no se construye.

Lo que tenía en mente es hacer un ASP.NET MVC sitio web donde los clientes (3rd partes) pueden regístrese y adquiera su ID de cliente. Con ASP.NET API Quería crear la API que tomara los tokens y parámetros requeridos, y luego acceder a los servicios Dyn AX.

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

Author: Robin, 2014-11-05

4 answers

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

Las cosas a hacer son:

  • Crear una nueva aplicación web
  • Instale los siguientes paquetes NuGet:
    • Microsoft.Owin
    • Microsoft.Owin.Host.SystemWeb
    • Microsoft.Owin.Security.OAuth
    • Microsoft.AspNet.Identity.Owin
  • Añadir una clase OWIN startup

Luego cree un archivo HTML y un JavaScript (index.js) con estos contenido:

var loginData = 'grant_type=password&[email protected]&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);
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <script type="text/javascript" src="index.js"></script>
</body>
</html>

La clase OWIN startup 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 == "[email protected]" && context.Password == "test123")
                        {
                            ClaimsIdentity oAuthIdentity = new ClaimsIdentity(context.Options.AuthenticationType);
                            context.Validated(oAuthIdentity);
                        }
                    }
                },
                AllowInsecureHttp = true,
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(1)
            };

            app.UseOAuthBearerTokens(OAuthOptions);
        }
    }
}

Ejecuta tu proyecto. El token debe mostrarse en la ventana emergente.

 74
Author: Kai Hartmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-20 09:21:14

Estoy investigando lo mismo y me topé con identityserver que implementa OAuth y OpenID en la parte superior de ASP.NET. Se integra con ASP.NET identity and Membership Reboot with persistence support for Entity Framework.

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

 4
Author: Korayem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-25 07:36:25

Gmail: OAuth

  • Ir al enlace
  • Inicie sesión con su contraseña de nombre 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 la Aplicación Web como tipo de aplicación e Ingrese el Nombre - > Ingrese la URL de redirección Autorizada (Por ejemplo: http://localhost:53922/signin-google ) - > Haga clic en el botón Crear. Esta voluntad cree las credenciales. Por favor tome nota de Client ID y Secret ID. Finalmente haga clic en Aceptar para cerrar la ventana emergente credenciales.
  • El siguiente paso importante es habilitar el Google API. Haga clic en Información general en el panel izquierdo.
  • Haga clic en Google API en la sección Social APIs.
  • Haga clic en Habilitar.

Eso es todo desde la parte de Google.

Vuelva a su aplicación, abra App_start/Startup.Auth.cs y descomente el siguiente fragmento

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

Actualizar el ClientId y ClientSecret con los valores desde Google API credenciales que ya ha creado.

  • Ejecute su aplicación
  • Haga clic en Iniciar sesión
  • Verá el botón de Google en la sección' Usar otra sección para iniciar sesión '
  • Haga clic en el botón de Google
  • La aplicación le pedirá que introduzca el nombre de usuario y la contraseña
  • Introduzca el nombre de usuario y la contraseña de gmail y haga clic en Iniciar sesión
  • Esto realizará el OAuth y volverá a su solicitud y le pedirá que se registre con el id Gmail.
  • Haga clic en registrar para registrar el id Gmail en su base de datos de aplicaciones.
  • Verá que los detalles de identidad aparecen en la parte superior como registro normal
  • Intente cerrar sesión y vuelva a iniciar sesión a través de Gmail. Esto te registrará automáticamente en la aplicación.
 -10
Author: Ramachandran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-26 07:39:09