Comment implémenter le serveur oauth2 dans ASP.NET MVC 5 et WEB API 2

Je vais d’abord dessiner mon projet:

Pour mon interne, je dois append des fonctionnalités à un système existant. Un client tiers doit pouvoir accéder aux données des services Web AX une fois qu’il est autorisé par l’utilisateur via oauth2. Je comprends que je dois créer un «service Web proxy» auquel le client peut faire ses appels et qui appelle les services AX, mais je ne suis pas certain de la partie oauth2. La plupart des didacticiels et des guides concernent l’utilisation de l’identité ASP.NET pour les connexions Facebook ou Google. Je n’ai pas besoin de ça, j’ai besoin d’utiliser les identifiants existants, donc j’ai besoin de faire mon propre service oauth2.

J’ai du mal à trouver des tutoriels, des guides ou des explications à ce sujet. Je comprends oauth2 et ce qui doit être fait, mais je n’ai jamais fait une telle chose auparavant et j’ai du mal à démarrer. La chose la plus proche de ce dont j’ai besoin est ce lien de repository github , mais la solution ne se construit pas.

Ce que je pensais est de créer un site Web ASP.NET MVC où les clients (tiers) peuvent s’inscrire et acquérir leurs identifiants clients. Avec l’API ASP.NET, je voulais créer l’API qui prend les jetons et les parameters requirejs, puis accéder aux services Dyn AX.

Est-ce correct ou est-ce que je me trompe complètement? Toute aide ou liens concernant la création de votre propre serveur / service oauth2 serait bien.

Il y a un billet de blog shiny de Taiseer Joudeh avec une description détaillée étape par étape.

  1. Partie 1: Authentification basée sur des jetons utilisant ASP.NET Web API 2, Owin et Identity
  2. Partie 2: Authentification par jeton AngularJS à l’aide de l’API Web ASP.NET 2, Owin et Identity
  3. Partie 3: Activer OAuth Refresh Tokens dans AngularJS App en utilisant ASP .NET Web API 2 et Owin
  4. Partie 4: connexions externes à l’API Web ASP.NET 2 avec Facebook et Google dans l’application AngularJS
  5. Partie 5: Découpler le serveur d’autorisation OWIN du serveur de ressources

J’ai également eu du mal à trouver des articles sur la façon de générer la partie jeton. Je n’ai jamais trouvé un et écrit le mien. Donc, si ça aide:

Les choses à faire sont:

  • Créer une nouvelle application Web
  • Installez les packages NuGet suivants:
    • Microsoft.Owin
    • Microsoft.Owin.Host.SystemWeb
    • Microsoft.Owin.Security.OAuth
    • Microsoft.AspNet.Identity.Owin
  • Ajouter une classe de startup OWIN

Créez ensuite un fichier HTML et un fichier JavaScript ( index.js ) avec ces contenus:

 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); 
          

La classe de startup OWIN doit avoir ce contenu:

 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 PathSsortingng("/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); } } } 

Exécutez votre projet. Le jeton doit être affiché dans la fenêtre contextuelle.

Je recherche la même chose et je suis tombé sur IdentityServer qui implémente OAuth et OpenID sur ASP.NET. Il s’intègre avec l’ identité ASP.NET et le redémarrage de l’adhésion avec prise en charge de la persistance pour Entity Framework.

Donc, pour répondre à votre question, consultez leur document détaillé sur la façon de configurer un serveur OAuth et OpenID .

Gmail: OAuth

  • Aller au lien
  • Connectez-vous avec votre mot de passe utilisateur gmail
  • Cliquez sur le menu google en haut à gauche
  • Cliquez sur API Manager
  • Cliquez sur les informations d’identification
  • Cliquez sur Créer des informations d’identification et sélectionnez Client OAuth.
  • Sélectionnez Application Web comme type d’application et entrez le nom-> Entrer l’URL de redirection autorisée (par exemple: http: // localhost: 53922 / signin-google ) -> Cliquez sur le bouton Créer. Cela créera les informations d’identification. Veuillez noter l’ Client ID du Client ID et l’ Secret ID . Enfin, cliquez sur OK pour fermer les informations d’identification.
  • La prochaine étape importante consiste à activer l’ Google API . Cliquez sur Présentation dans le volet gauche.
  • Cliquez sur l’ Google API sous la section API sociales.
  • Cliquez sur Activer.

C’est tout de la part de Google.

Revenez à votre application, ouvrez App_start/Startup.Auth.cs et décommentez l’extrait suivant

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

Mettez à jour ClientId et ClientSecret avec les valeurs des informations d’identification de l’ Google API que vous avez déjà créées.

  • Exécutez votre application
  • Cliquez sur Login
  • Vous verrez le bouton Google sous la section “Utiliser une autre section pour vous connecter”.
  • Cliquez sur le bouton Google
  • L’application vous demandera d’entrer le nom d’utilisateur et le mot de passe
  • Entrez le nom d’utilisateur et le mot de passe gmail, puis cliquez sur Connexion.
  • Cela effectuera l’OAuth et reviendra à votre application et vous demandera de vous enregistrer avec l’ID Gmail .
  • Cliquez sur Enregistrer pour enregistrer l’identifiant Gmail dans la firebase database de votre application.
  • Vous verrez les détails d’identité apparaître dans le haut en tant qu’enregistrement normal
  • Essayez de vous déconnecter et de vous reconnecter via Gmail. Cela vous connectera automatiquement à l’application.