.NET Core Identity Server 4-Authentifizierung VS-Identitätsauthentifizierung
Ich versuche zu verstehen, die richtige Art und Weise zu tun-Authentifizierung in ASP.NET Core. Ich habe mehrere Ressourcen (von denen die Meisten veraltet).
- Einfache-Umsetzung-Von-Microsoft-Identität
- Einführung in die Authentifizierung mit ASP.Kern
- MSDNs Einführung in die Identität
Einige Leute bieten Alternative Lösungen, die besagt, verwenden Sie eine cloud-basierte Lösung wie Azure AD, oder Verwenden IdentityServer4 und meine host-eigenen Token-Server.
In der Älteren version .Net eine der einfacheren Formen der Authentifizierung zum erstellen eines Benutzerdefinierten Iprinciple und speichern zusätzliche Authentifizierung Benutzer-Daten.
public interface ICustomPrincipal : System.Security.Principal.IPrincipal
{
string FirstName { get; set; }
string LastName { get; set; }
}
public class CustomPrincipal : ICustomPrincipal
{
public IIdentity Identity { get; private set; }
public CustomPrincipal(string username)
{
this.Identity = new GenericIdentity(username);
}
public bool IsInRole(string role)
{
return Identity != null && Identity.IsAuthenticated &&
!string.IsNullOrWhiteSpace(role) && Roles.IsUserInRole(Identity.Name, role);
}
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get { return FirstName + " " + LastName; } }
}
public class CustomPrincipalSerializedModel
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
Dann würden Sie Serialisieren Sie Ihre Daten in ein cookie und senden Sie es zurück an den client.
public void CreateAuthenticationTicket(string username) {
var authUser = Repository.Find(u => u.Username == username);
CustomPrincipalSerializedModel serializeModel = new CustomPrincipalSerializedModel();
serializeModel.FirstName = authUser.FirstName;
serializeModel.LastName = authUser.LastName;
JavaScriptSerializer serializer = new JavaScriptSerializer();
string userData = serializer.Serialize(serializeModel);
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,username,DateTime.Now,DateTime.Now.AddHours(8),false,userData);
string encTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
Response.Cookies.Add(faCookie);
}
Meine Fragen sind:
- Wie kann ich mich authentifizieren ähnlich wie die Art und Weise getan, die in früheren version die .Net gilt der alte Weg, immer noch arbeiten oder gibt es eine neuere version.
- Was sind die vor-und Nachteile der Verwendung von Ihrem eigenen token-server Verse, die Erstellung Ihrer eigenen benutzerdefinierten Prinzip?
- Beim Einsatz einer cloud-basierten Lösung oder ein separates Token-server wie würden Sie sich Integrieren, dass Sie mit Ihrer aktuellen Anwendung würde ich müsste noch eine Tabelle users in meiner Anwendung, wie würden Sie verknüpfen die beiden?
- Sein, es gibt so viele verschiedene Lösungen, wie kann ich erstellen Sie eine enterprise-Anwendung zu ermöglichen, Anmeldung über Gmail/Facebook während noch in der Lage zu erweitern, um andere SSO -
- Was sind einige einfache Implementierungen dieser Technologien?
InformationsquelleAutor der Frage johnny 5 | 2017-02-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
TL;DR
IdentityServer = token encryption und validation services über OAuth 2.0 Und OpenId-Connect
ASP.NET Identität = die aktuelle Identity-Management-Strategie im ASP.NET
Wie kann ich mich authentifizieren ähnlich wie die Art und Weise getan, die in früheren version die .Net gilt der alte Weg, immer noch arbeiten oder gibt es eine neuere version.
Sehe ich keinen Grund, warum Sie konnte nicht erreichen die alte Art und Weise, in ASP.NET Core, aber im Allgemeinen, dass Strategie wurde ersetzt mit ASP.NET Identität und ASP.NET Identität ist lebendig und gut in ASP.NET Core.
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity
ASP.NET Identität verwendet sicherungsspeicher wie SQL-Server zu halten, Benutzer-Informationen wie Benutzername, password (hashed), E-Mail, Telefon und leicht erweiterbar zu halten, FirstName, LastName oder sonst was ist. Es gibt also wirklich keinen Grund zu verschlüsseln, Benutzer-Informationen in einem cookie, und übergeben Sie hin und her, vom client zum server. Es unterstützt die Begriffe, wie Benutzer behauptet, Benutzer-Token, Benutzer, Rollen und externe logins. Hier sind die Entitäten in ASP.NET Identität:
Was sind die vor-und Nachteile der Verwendung von Ihrem eigenen token-server Verse, die Erstellung Ihrer eigenen benutzerdefinierten Prinzip?
Einen token-server wäre ein system, das erzeugt eine einfache Daten-Struktur, die die Autorisierung und/oder Authentifizierung Informationen. Genehmigung dauert in der Regel die für ein token namens access_token. Dies wäre der "Schlüssel zum Haus", so zu sprechen, dass Sie durch die Tür und in die Residenz des eine geschützte Ressource, in der Regel eine web-api. Für die Authentifizierung, die
id_token
enthält einen eindeutigen Bezeichner für einen Benutzer/eine person. Während es ist üblich, für solch ein Bezeichner in den access_token, gibt es nun ein dediziertes Protokoll, das zu tun: OpenID-Connect.Den Grund zu haben, Ihr eigenes Security Token Service (STS), wäre, um Ihre Daten zu schützen Vermögen, über Kryptographie und Steuern, welche clients (Anwendungen) können auf diese Ressourcen zugreifen. Darüber hinaus, die standards für die identity-Kontrollen gibt es inzwischen in den OpenID Connect-Spezifikationen. IdentityServer ist ein Beispiel für eine OAuth 2.0 Authorization Server kombiniert mit einer OpenID-Connect-Authentifizierung server.
Aber nichts davon ist notwendig, wenn Sie wollen einfach nur eine user-Tabelle in Ihrer Anwendung. Sie brauchen nicht einen token-server - verwenden Sie einfach ASP.NET Identität. ASP.NET Identität ordnet die Benutzer einer "ClaimsIdentity" - Objekt auf dem server - keine Notwendigkeit für eine benutzerdefinierte IPrincipal-Klasse.
Bei der Verwendung einer cloud-basierten Lösung oder ein separates Token-server wie würden Sie sich Integrieren, dass Sie mit Ihrer aktuellen Anwendung würde ich müsste noch eine Tabelle users in meiner Anwendung, wie würden Sie verknüpfen die beiden?
Sehen Sie diese tutorials für die Integration von separaten identity-Lösungen mit einer Anwendung:
https://identityserver4.readthedocs.io/en/release/quickstarts/0_overview.html
https://auth0.com/docs/quickstart/webapp/aspnet-core
Zumindest müssten Sie eine Tabelle zwei Spalten zuordnen des Benutzernamens zu der externen Anbieter, die die Benutzer-id. Dies ist, was die AspNetUserLogins-Tabelle ist in ASP.NET Identität. Die Zeilen in dieser Tabelle sind jedoch abhängig von der Benutzer-Datensatz in AspNetUsers.
ASP.NET Identität unterstützt externe Anbieter wie Google, Microsoft, Facebook, einem OpenID-Connect-provider, Azure AD sind schon da. (Google und Microsoft haben bereits implementiert das OpenID-Connect-Protokoll, so dass Sie nicht brauchen Ihre eigene integration-Pakete, wie diesezum Beispiel). Auch, ADFS ist noch nicht erhältlich ASP.NET Kern-Identität.
Sehen, dieses Dokument zu erhalten, begann mit externen Anbietern ASP.NET Identität:
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/
Sein, es gibt so viele verschiedene Lösungen, wie kann ich erstellen Sie eine enterprise-Anwendung zu ermöglichen, Anmeldung über Gmail/Facebook während noch in der Lage zu erweitern, um andere SSO -
Wie oben erläutert, ASP.NET Identität tut dies bereits. Es ist ziemlich einfach zu erstellen, Sie durch einen "Externen Anbieter" - Tabelle und der Daten-Laufwerk Ihrer externen login-Prozess. Also, wenn Sie einen neuen "SSO" kommt zusammen, fügen Sie einfach eine neue Zeile mit den Eigenschaften, wie der Anbieter die url, die client-id und geheimen, die Sie geben Sie. ASP.NET Identität hat schon das UI gebaut, in der es Visual Studio-Vorlagen, aber sehen Social Login für die kühlen Tasten.
Zusammenfassung
Wenn Sie nur eine Benutzer-Tabelle mit Passwort anmelden, Fähigkeiten und ein user-Profil, dann ASP.NET Identität ist perfekt. Keine Notwendigkeit der Beteiligung externer Behörden. Aber wenn haben Sie viele Anwendungen benötigen Zugriff auf viele apis, die dann eine unabhängige Behörde zu sichern und zu validieren, identity-und access-Token sinnvoll ist. IdentityServer ist eine gute Passform, oder sehen openiddict-coreoder Auth0 für eine cloud-Lösung.
Meine Entschuldigung ist dies nicht zu schlagen, das mark oder, wenn es zu Schnupper. Bitte fühlen Sie sich frei, um die Interaktion zu erhalten, um das bulls-eye, die Sie suchen.
Nachtrag: Cookie-Authentifizierung
Tun bare bones-Authentifizierung mit cookies, gehen Sie folgendermaßen vor. Aber meines Wissens eine custom Ansprüche AUFTRAGGEBER wird nicht unterstützt. Um den gleichen Effekt erzielen, nutzen Sie den Ansprüchen Liste der
ClaimPrincipal
Objekt.Erstellen Sie eine neue ASP.NET Core 1.1 Web-Anwendung in Visual Studio 2015/2017 Auswahl von "Keine Authentifizierung" im Dialogfeld. Dann add package:
Unter der
Configure
Methode inStartup.cs
legen Sie diese (vorapp.UseMvc
):Erstellen Sie dann einen login-ui und veröffentlichen Sie die html-Formular zu einer Action-Methode wie diese:
Den HttpContext.Benutzer-Objekt sollte Ihre benutzerdefinierten Ansprüche und sind leicht abrufbar die Sammlung der Liste der ClaimPrincipal.
Ich hoffe das genügt, als eine vollständige Lösung/Projekt scheint ein bisschen viel für einen StackOverflow-post.
InformationsquelleAutor der Antwort travis.js
Ich habe immer verwendet den eingebauten ASP.NET Identität (und vorher Mitgliedschaft) Autorisierung/Authentifizierung, die ich umgesetzt haben Auth0 vor kurzem (https://auth0.com) und empfehlen, diesen als etwas anderes zu versuchen.
InformationsquelleAutor der Antwort Mark Redman
TL;DR
Ich würde wirklich gerne Zeigen, Eine Vollständige Buchung auf, wie Sie richtig zu implementieren IdentityServer4 aber ich habe versucht, passen Sie den Text ganz, aber es war jenseits der Grenze dessen, was StackOverflow Akzeptiert also, stattdessen werde ich direkt einige Tipps und Dinge die ich gelernt habe.
Was sind die Vorteile der Verwendung eines Token-Server Vs ASP-Identität?
Einen token-server, hat eine Menge Vorteile, aber es ist nicht nach rechts für jeder. Wenn Sie die Implementierung einer enterprise-Lösung wie, wo Sie wollen mehrere client in der Lage sein, um login -, Token-server ist Ihre beste Wette, aber wenn Sie nur eine einfache website, die wollen, um Unterstützung für Externe Logins, können Sie Weg Mit ASP-Identität und einige Middleware.
Identity Server 4 Tipps
Identity server 4 ist ziemlich gut dokumentiert-im Gegensatz zu vielen anderen frameworks, die ich gesehen habe, aber es ist hart, von vorne zu beginnen und das ganze Bild zu sehen.
Meine erste mistak wurde versucht, die Verwendung von OAuth als Authentifizierung ja, es gibt Möglichkeiten, dies zu tun, aber OAuth für die Autorisierung Authentifizierung nicht, wenn Sie Authentifizieren möchten, verwenden Sie OpenIdConnect (OIDC)
In meinem Fall wollte ich erstellen Sie Eine javascript-client, der eine Verbindung zu einer web-api.
Ich schaute auf eine Menge Lösungen, aber anfangs habe ich versucht zu verwenden, die die webapi Aufruf der Authentifizierung Identity Server und war nur zu haben, dass der token beibehalten, denn es wurde überprüft, auf dem server. Diesen flow kann möglicherweise funktionieren, aber Es hat viele Schwächen.
Endlich den richtigen flow, wenn ich gefunden, die Javascript-Client-Beispiel hab ich den richtigen flow. Sie Client anmeldet, und legt ein token. Dann haben Sie Ihren web-api verbrauchen die OIdc Client, das wird, überprüfen Sie, ob access token gegen IdentityServer.
Die Verbindung zu den Filialen und Migrationen
Ich hatte eine Menge von ein paar Missverständnisse mit Migrationen auf den ersten. Ich hatte den Eindruck, dass laufen eine migration Generiert den SQL-Code von der dll intern, anstatt Sie so konfiguriert sind, dass der Kontext, um herauszufinden, wie man erstellen Sie die SQL.
Gibt es zwei syntaxformen für Migrationen zu wissen, die man in Ihrem computer verwendet wird, ist wichtig:
Ich denke, die parameter nach der Migration ist der name, warum du einen Namen brauchen ich bin mir nicht sicher, die
ApplicationDbContext
ist ein Code-First-DbContext in die Sie anlegen wollen.Migrationen verwenden einige auto-magic finden Sie die Verbindungszeichenfolge aus, wie sich Ihr start-up ist so konfiguriert, ich nahm an, es verwendet eine Verbindung vom Server-Explorer.
Falls Sie mehrere Projekte haben stellen Sie sicher, dass das Projekt mit den ApplicationDbContext festlegen, wie Ihr start-up.
Gibt es eine Menge von beweglichen teilen, wenn die Implementierung der Autorisierung und Authentifizierung, ich hoffe, dieser Beitrag hilft jemand. Der einfachste Weg, um vollständig verstehen, Beglaubigungen, wählen Sie neben Ihrem Beispiele zu Stück, alles zusammen, und stellen Sie sicher, dass Ihr Lesen Sie die Dokumentation
InformationsquelleAutor der Antwort johnny 5
Social logins sind nicht schwer zu implementieren, mit der Identität, aber es ist eine Erstinstallation beteiligt, und manchmal sind die Schritte, die Sie online finden, in die docs sind nicht identisch, in der Regel finden Sie Hilfe unter dem Entwickler-Bereich der Plattform, die Sie versuchen, um das setup der social logins. Identität ist der Ersatz der alten Mitgliedschaft-Funktionen, die in älteren Versionen von der .net-framework.Was ich gefunden habe, verwunderlich ist, dass edge-use-cases, wie an einem jwt token, das Sie bereits haben, um eine web-api nicht abgedeckt werden, überall in den Beispielen online auch auf pluralsight, ich bin sicher, Sie brauchen nicht Ihre eigenen token Autorität, dies zu tun, aber ich habe nicht gefunden, ein einziges Beispiel auf, wie die übergabe von Daten in einem get oder post, ist nicht der Umgang mit einem selbst gehosteten server.
InformationsquelleAutor der Antwort webdev8183