Wie man oauth2 Server in ASP.NET MVC 5 und WEB API 2 implementiert


1 Answers

Ich hatte auch Probleme, Artikel darüber zu finden, wie man nur den Token-Teil generiert. Ich habe nie eine gefunden und meine eigene geschrieben. Also wenn es hilft:

Die Dinge zu tun sind:

  • Erstellen Sie eine neue Webanwendung
  • Installieren Sie die folgenden NuGet-Pakete:
    • Microsoft.Owin
    • Microsoft.Owin.Host.SystemWeb
    • Microsoft.Owin.Security.OAuth
    • Microsoft.AspNet.Identity.Owin
  • Fügen Sie eine OWIN-Startklasse hinzu

Erstellen Sie dann eine HTML- und eine JavaScript-Datei ( index.js ) mit diesen Inhalten:

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);
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <script type="text/javascript" src="index.js"></script>
</body>
</html>

Die OWIN- startup Klasse sollte diesen Inhalt haben:

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

Führen Sie Ihr Projekt aus. Das Token sollte im Popup-Fenster angezeigt werden.

Question

Zuerst werde ich mein Projekt skizzieren:

Für mein Praktikum muss ich Funktionalität zu einem bestehenden System hinzufügen. Ein Drittanbieter-Client muss auf Daten von AX-Webdiensten zugreifen können, sobald er vom Benutzer über oauth2 autorisiert wurde. Ich verstehe, dass ich einen "Proxy Web Service" machen muss, wo der Kunde seine Anrufe tätigen kann und dass er die AX-Dienste anruft, aber ich bin ein bisschen unsicher über den oauth2-Teil. In den meisten Tutorials und Anleitungen wird die Identität von ASP.NET für Facebook oder Google Logins verwendet. Ich brauche das nicht, ich muss vorhandene Anmeldeinformationen verwenden, also muss ich meinen eigenen oauth2-Dienst machen.

Ich finde es schwierig, Tutorials, Anleitungen oder Erklärungen dazu zu finden. Ich verstehe oauth2 und was getan werden muss, aber ich habe noch nie so etwas getan und finde es schwer anzufangen. Die nächste Sache, die ich brauche, die ich gefunden habe, ist diese Github Repo Verbindung , aber die Lösung baut nicht auf.

Ich habe mir eine ASP.NET MVC-Website ausgedacht, auf der sich Clients (Drittanbieter) registrieren und ihre Client-IDs erwerben können. Mit ASP.NET API wollte ich die API erstellen, die die erforderlichen Token und Parameter verwendet und dann auf die Dyn AX-Dienste zugreift.

Ist das richtig oder liege ich völlig falsch? Jede Hilfe oder Links in Bezug auf den Aufbau Ihres eigenen oauth2 Servers / Dienstes wäre nett.




Google Mail: OAuth

  • Gehe zum link
  • Melden Sie sich mit Ihrem Google Mail-Nutzernamen-Passwort an
  • Klicken Sie auf das Google-Menü oben links
  • Klicken Sie auf API-Manager
  • Klicken Sie auf Anmeldeinformationen
  • Klicken Sie auf Create Credentials und wählen Sie OAuth Client
  • Wählen Sie Webanwendung als Anwendungstyp und geben Sie den Namen ein -> Geben Sie die autorisierte Weiterleitungs-URL ein (z. B. http://localhost:53922/signin-google ) -> Klicken Sie auf die Schaltfläche Erstellen. Dadurch werden die Anmeldeinformationen erstellt. Bitte notieren Sie die Client ID und die Secret ID . Klicken Sie abschließend auf OK, um die Anmeldedaten zu schließen.
  • Der nächste wichtige Schritt ist die Aktivierung der Google API . Klicken Sie im linken Bereich auf Übersicht.
  • Klicken Sie auf die Google API unter Social APIs.
  • Klicken Sie auf Aktivieren.

Das ist alles aus dem Google-Teil.

Komm zurück zu deiner Anwendung, öffne App_start/Startup.Auth.cs und App_start/Startup.Auth.cs das folgende Snippet

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

Aktualisieren Sie die ClientId und ClientId mit den Werten aus den Google API Anmeldeinformationen, die Sie bereits erstellt haben.

  • Führen Sie Ihre Anwendung aus
  • Klicken Sie auf Anmelden
  • Sie sehen die Google-Schaltfläche unter "Verwenden Sie einen anderen Abschnitt zum Anmelden" Abschnitt
  • Klicken Sie auf die Schaltfläche Google
  • Die Anwendung fordert Sie auf, den Benutzernamen und das Passwort einzugeben
  • Geben Sie den Google Mail-Nutzernamen und das Passwort ein und klicken Sie auf Anmelden
  • Dadurch wird das OAuth ausgeführt und Sie kehren zu Ihrer Anwendung zurück und werden aufgefordert, sich bei der Gmail ID anzumelden.
  • Klicken Sie auf Registrieren, um die Gmail ID in Ihrer Anwendungsdatenbank zu registrieren.
  • Die Identitätsdetails werden oben als normale Registrierung angezeigt
  • Versuchen Sie, sich abzumelden und erneut über Gmail einzuloggen. Dadurch werden Sie automatisch in die App eingeloggt.



Related