2016-12-30 1 views
0

Ich möchte API (s) mit ASP.NET WEB API machen, die privat oder geschützt sein sollte. Unter Verwendung der API (s) plane ich, Xamarin-Anwendung und eine MVC-Website zu machen. Nur die Apps können die API (s) verwenden. Wenn jemand die API (s) erhält, kann er/sie Daten mithilfe der API (s) abrufen. Ich will es nicht!Wie kann ich eine private/geschützte API mithilfe der Web-API von ASP.NET erstellen?

Wie kann ich es tun? Ich brauche einen Vorschlag.

+0

'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

Antwort

0

Sie können Ihre API mit API Key Authentication Mechanismus sichern. Hier ist eine gute tutorial

0

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.

Verwandte Themen