starten in Ihrem global.asax.cs Datei gehen und fügen Sie
GlobalConfiguration.Configuration.MessageHandlers.Add(new AuthHandler())
eine Klasse AuthHandler in Ihrem Projekt erstellen und diese Klasse Schnittstelle mit DelegatingHandler machen:
public class AuthHandler: DelegatingHandler
Erstellen Sie zwei Methoden innerhalb Ihrer AuthHandler-Klasse namens ValidateCredentials und SendAsync. Die SendAsync-Methode wird überschrieben.
private bool ValidateCredentials(AuthenticationHeaderValue authVal){}
protected override async Task<HttpResponseMessage> SendAsync(HttpResponseMessage request, CancellationToken cancelTok){}
Wenn eine Klasse oder Methode das Autorisieren Filter angewendet hat, wird die Message in Ihrer global.asax aufgerufen, die Auth-Handler ruft Sie zum Beispiel erstellt,:
[Authorize]
public class SomeController : ApiControler{}
So was links ist die tatsächliche Authentifizierung des Benutzers. Sie müssen den Header-Wert erhalten (von der Client-Anwendung platziert), dekodieren und gegen Ihre Datenbank oder was auch immer Sie verwenden.
private bool ValidateCredentials(AuthenticationHeaderValue authVal)
{
try{
string decodedHeader = new Classes.Strings().decode(authVal);
this.user = // some query to check against database goes here
return true;
}
catch{
// some type of error control here
return false
}
}
protected override async Task<HttpResponseMessage> SendAsync(HttpResponseMessage request, CancellationToken cancelTok)
{
if(ValidateCredentials(request.Headers.Authorization))
{
// store user here to use around the api on this request
}
}
Kurz gesagt, HTTP muss Ihren Authentifizierungsheaderwert speichern. Verwenden Sie diesen Wert für jede Anforderung, um alle Klassen oder Funktionen zu filtern, für die eine Authentifizierung erforderlich ist. Als nächstes würde ich über HTTP-Header nachlesen, speziell den Authentication-Header-Wert.
'OAuth2' ist auch eine gute Option dafür, siehe http://stackoverflow.com/questions/26755573/how-to-implement-oauth2-server-in-asp-net-mvc-5-and-web -api-2 – G0dsquad