Wie kann ich mich bei einer ASP.NET-WebAPI authentifizieren, die die Formularauthentifizierung aus einer C # -Konsolenanwendung verwendet?

9

Ich habe eine bestehende, funktionierende ASP.NET MVC 4-Webanwendung. Ich habe mein eigenes RoleProvider geschrieben und verwende das Standardattribut [Autorisieren] . Meine Controller sehen so aus:

%Vor%

Ich möchte meiner Anwendung einen WebAPI-Controller hinzufügen und meine bestehenden Installationen nutzen

%Vor%

Dies funktioniert für Javascript-Ajax-Aufrufe innerhalb meiner Site (da der Browser-Benutzer bereits mit einem Forms-Authentifizierungs-Cookie authentifiziert ist). Meine Frage stammt von einer C # -Konsolenanwendung (oder einer anderen Anwendung, die nicht Teil meiner Webanwendung ist). Wie kann ich mich bei dieser API authentifizieren?

Nehmen wir an, dass ich für die Teile meiner API, die öffentlich sind, einen Code verwende, der dem sehr ähnlich ist, der in dieser Frage gefunden wird WebApi in MVC3 verwenden .

%Vor%

Was müsste ich hier ändern? Oder müsste ich das verwerfen und einen ganz anderen Ansatz verwenden? Ich bin nicht an die Verwendung von Forms für die API-Authentifizierung von Remote-Clients gebunden, aber ich möchte den aktuellen eleganten Ansatz für JavaScript-Clients beibehalten, die Teil der App sind (nur API anfordern, da Formular-Cookie gesetzt ist).

    
Nate 07.02.2013, 21:06
quelle

2 Antworten

3

Sie könnten die Standardformularauthentifizierung mit einer benutzerdefinierten Basisauthentifizierung kombinieren, die auf denselben Grundelementen wie die Formularauthentifizierung basiert. Hinweis mit Basic, HTTPS wird dringend empfohlen (und in der Tat mehr und mehr Windows-Komponente unterstützen nicht standardmäßig Basic + HTTP heutzutage).

Hier ist ein Beispielcode für ein Basisauthentifizierungsmodul, das Code aus Forms Auth wiederverwendet. Es kommt auch mit einem eigenen Konfigurationsabschnitt ('basicAuth' genannt). Sie möchten sicherstellen, dass beide Auths (Forms und Basic) denselben Cookie und dieselben Parameter verwenden, wenn sie zusammen konfiguriert sind:

%Vor%

Sobald dies serverseitig installiert ist, können Sie den WebClient so konfigurieren, dass Basic Auth:

verwendet wird %Vor%     
Simon Mourier 11.02.2013 17:05
quelle
1

Es gibt zahlreiche Möglichkeiten, den Cookie mit der Konsolenanwendung zu teilen. Sehen Sie sich hier einige Ideen an:

Ссылка

Eine weitere einfache Option wäre, eine Webmethode verfügbar zu machen, die keine Authentifizierung erfordert, den Benutzernamen und das Passwort erhält und das Cookie an den Client zurückgibt.

Ganz gleich, welchen Ansatz Sie verfolgen, Ihr Ziel ist es, irgendwie den Formular-Cookie auf der Seite der Konsolenanwendung zu bekommen. Von dort aus sind Sie leicht zu erledigen, denn alles, was Sie tun, ist, dass Sie den Cookie an Ihre Anfragen anhängen. Die Web API nimmt den Cookie gerne entgegen.

    
Wiktor Zychla 07.02.2013 21:28
quelle