Dieses Thema war für mich unglaublich verwirrend. Ich bin ein Neuling in HTTP-Apps, muss aber einen iPhone-Client entwickeln, der JSON-Daten von irgendwoher verwendet. Ich habe mich für die Web-API von MS entschieden, weil es einfach genug schien, aber wenn es darum geht, Benutzer zu authentifizieren, werden die Dinge ziemlich frustrierend.
Ich bin erstaunt, dass ich nach mehreren Stunden Googeln kein klares Beispiel für die Authentifizierung eines Benutzers vom Anmeldebildschirm bis zur Verwendung des Authorize
Attributs über meine ApiController
Methoden gefunden habe.
Dies ist keine Frage, sondern eine Anfrage nach einem Beispiel, wie dies genau zu tun ist. Ich habe mir folgende Seiten angesehen:
- Sicherstellen der Sicherheit Ihrer ASP.NET-Web-API
- Grundlegende Authentifizierung mit der ASP.NET-Web-API
Obwohl diese erklären, wie mit nicht autorisierten Anfragen umgegangen wird, zeigen diese nicht deutlich etwas Ähnliches LoginController
, um nach Benutzeranmeldeinformationen zu fragen und diese zu validieren.
Wer bereit ist, ein schönes einfaches Beispiel zu schreiben oder mich in die richtige Richtung zu weisen, bitte?
Vielen Dank.
quelle
Antworten:
Das liegt daran, dass Sie über diese beiden Konzepte verwirrt sind:
Die Authentifizierung ist der Mechanismus, mit dem Systeme ihre Benutzer sicher identifizieren können. Authentifizierungssysteme geben Antworten auf die folgenden Fragen:
Die Autorisierung ist der Mechanismus, mit dem ein System bestimmt, welche Zugriffsebene ein bestimmter authentifizierter Benutzer auf vom System kontrollierte Ressourcen haben soll. Beispielsweise könnte ein Datenbankverwaltungssystem so konzipiert sein, dass bestimmte spezifizierte Personen die Möglichkeit erhalten, Informationen aus einer Datenbank abzurufen, jedoch nicht die in der Datenbank gespeicherten Daten zu ändern, während anderen Personen die Möglichkeit gegeben wird, Daten zu ändern. Autorisierungssysteme geben Antworten auf folgende Fragen:
Das
Authorize
Attribut in MVC wird verwendet, um Zugriffsregeln anzuwenden, zum Beispiel:Die obige Regel erlaubt nur Benutzern im Admin und Super User Rollen " auf die Methode zugreifen
Diese Regeln können auch in der Datei web.config mithilfe des
location
Elements festgelegt werden. Beispiel:Bevor diese Autorisierungsregeln ausgeführt werden, müssen Sie jedoch bei der aktuellen Website authentifiziert sein .
Von hier aus könnten wir das Problem in zwei Teile teilen:
Authentifizieren Sie Benutzer, wenn Sie die Web-API-Dienste in derselben Webanwendung nutzen
Dies wäre der einfachste Ansatz, da Sie sich auf die verlassen würden Authentifizierung in ASP.Net verlassen würden
Dies ist ein einfaches Beispiel:
Web.config
Benutzer werden zur Konto- / Anmelderoute umgeleitet. Dort würden Sie benutzerdefinierte Steuerelemente rendern, um nach Benutzeranmeldeinformationen zu fragen, und dann würden Sie das Authentifizierungscookie wie folgt setzen:
Plattformübergreifende Authentifizierung
In diesem Fall würden Sie nur Web-API-Dienste in der Webanwendung verfügbar machen. Daher würde ein anderer Client die Dienste nutzen. Der Client könnte eine andere Webanwendung oder eine beliebige .NET-Anwendung sein (Win Forms, WPF, Konsole, Windows-Dienst, etc)
Angenommen, Sie verwenden den Web-API-Dienst von einer anderen Webanwendung in derselben Netzwerkdomäne (innerhalb eines Intranets). In diesem Fall können Sie sich auf die von ASP.Net bereitgestellte Windows-Authentifizierung verlassen.
Wenn Ihre Dienste im Internet verfügbar gemacht werden, müssen Sie die authentifizierten Token an jeden Web-API-Dienst übergeben.
Weitere Informationen erhalten Sie in den folgenden Artikeln:
http://stevescodingblog.co.uk/basic-authentication-with-asp-net-webapi/
http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/
quelle
Wenn Sie sich anhand eines Benutzernamens und eines Kennworts und ohne Autorisierungscookie authentifizieren möchten , funktioniert das MVC4- Autorisierungsattribut nicht sofort . Sie können Ihrem Controller jedoch die folgende Hilfsmethode hinzufügen, um grundlegende Authentifizierungsheader zu akzeptieren. Rufen Sie es vom Anfang der Methoden Ihres Controllers auf.
Auf der Clientseite erstellt dieser Helfer einen
HttpClient
mit dem vorhandenen Authentifizierungsheader:quelle
Ich arbeite an einem MVC5 / Web-API-Projekt und musste in der Lage sein, eine Autorisierung für die Web-API-Methoden zu erhalten. Wenn meine Indexansicht zum ersten Mal geladen wird, rufe ich die 'API'-Web-API-Methode auf, von der ich glaube, dass sie automatisch erstellt wird.
Der clientseitige Code (CoffeeScript) zum Abrufen des Tokens lautet:
Bei Erfolg wird Folgendes aufgerufen, wodurch das Authentifizierungstoken lokal gespeichert wird:
Wenn ich dann einen Ajax-Aufruf an eine Web-API-Methode mit dem Tag [Authorize] senden muss, füge ich meinem Ajax-Aufruf einfach den folgenden Header hinzu:
quelle
response.access_token
? Stellen Sie es aus dem C # -Code ein?