Verwendung von IdentityServer4 mit und Javascript-Client mit ClientCredentials ASP.NET Core

9

Ich implementiere IdentityServer4 und mache drei verschiedene Projekte:

Alle Projekte werden mit ASP.NET Core erstellt, aber der JS-Client verwendet statische Dateien.

Ich brauche, dass der JS-Client mit der API nur mit Identitäts-Token (nicht Zugriffstoken) verbinden, weil ich nur Zugriff auf die API haben muss, muss ich nicht Benutzerauthentifizierung verwalten.

Ich lese die Schnellstart-Post Ссылка

Während ich lese, denke ich, dass ich den Implicit Grand Type benutzen muss und ich brauche nicht OpenID Connect, nur OAuth2.

Auch ich lese diesen Beitrag Ссылка Aber sie benutzen Zugangstoken und ich brauche das nicht, um eine Verbindung zur API herzustellen. Ich benutze die oidc-client-js-Bibliothek Ссылка und ich suche den Weg mit dem Implicit Grand Type, aber die Methoden, die ich benutze, leiten mich auf eine Ссылка Seite weiter (I denke, das ist, wenn ich OpenID Connect verwenden muss)

Was ist der beste Weg, um das zu erreichen? Was ich falsch gemacht habe? Wie kann ich mit der API authentifizieren und rufen Ссылка

IdentityServer-Projekt

Konfig.cs

%Vor%

Startup.cs

%Vor%

API-Projekt

Startup.cs

%Vor%

ValuesController.cs

%Vor%

Javascript-Client-Projekt

oidc-client-beispiel.html

%Vor%

oidc-client-sample.js

%Vor%

oidc-client-sample-callback.html

%Vor%     
Sebastián A 28.09.2016, 23:12
quelle

1 Antwort

1

Soweit ich sehe, sollte Ihr Code funktionieren, er macht alles.

  1. Ihre JavaScript-App (localhost: 5003) fordert ein Token an ( function signin() ). Dies führt zu einer Weiterleitung zu IdentityServer
  2. Der IdentityServer (localhost: 5000) ist eingerichtet und die Client-Einstellungen (Client.cs) stimmen mit der Anfrage überein. Obwohl die Konfiguration für Benutzer und Ressourcen fehlt: Siehe hier: Ссылка
  3. Ihre JavaScript-App hat eine korrekte "Zielseite", eine Seite, auf die IdentityServer nach erfolgreicher Anmeldung zurückleitet. Diese Seite nimmt das neu ausgestellte Token ( new Oidc.OidcClient().processSigninResponse() )
  4. auf
  5. Ihre JavaScript-App sendet das Token über seine API-Anfrage ( xhr.setRequestHeader("Authorization", "Bearer " + user.access_token); )
  6. Ihre API (localhost: 5001) ist korrekt eingerichtet und autorisiert sich gegen Ihren IdentityServer

Also ich denke, der Code ist in etwa richtig, aber es gibt einige Missverständnisse bezüglich der Begriffe.

  • Sie benötigen eine implizite Zuteilung. Vergessen Sie ClientCredentials, da es für einen anderen Workflow entworfen wurde und nicht in einem Browser verwendet werden sollte, da das Clientgeheimnis verfügbar gemacht wird. Dies bedeutet, dass jeder ein gültiges Token ("stehlen") ausstellen kann und Ihre Sicherheit gefährdet ist. (Wenn Sie müssen ClientCredentials verwenden, erstellen Sie eine Server-Proxy-Methode).
  • Sie benötigen OpenID Connect (OIDC) und OAuth2. (Dies sind keine genauen Definitionen !!) OIDC gibt das Token für Sie aus ("loggt den Benutzer ein"), während OAuth2 das Token validiert. Keine Sorge, IdentityServer kümmert sich darum.
  • Sie benötigen ein Zugangstoken. Das Identitäts-Token wird für den Anforderer (Ihre JavaScript-Anwendung localhost: 5003) ausgestellt. Das Zugriffstoken sollte an eine API (Ihre localhost: 5001 API)
  • weitergeleitet werden
  • Die Weiterleitung für "Login" ist normal. Dies ist ein typischer Workflow für Webanwendungen: Sie verlassen Ihre Anwendung (localhost: 5003) und landen im IdentityServer ( Ссылка ). Nach erfolgreicher Anmeldung werden Sie zurück zu Ihrer Anwendung (localhost: 5003)
  • weitergeleitet
balazska 07.11.2017 08:41
quelle