Wie kann ich sogar die Authentifizierung mithilfe der ASP.NET-Web-API kodieren, sodass es plattformübergreifend zur Unterstützung von Desktop, Mobile und Web ist? Ich habe einige Methoden zur Durchführung der RESTful-Authentifizierung gelesen, z. B. die Verwendung von Tokens im Header.
Gibt es irgendwelche Beispielprojekte, die diese Methode verwenden?
Fragen:
[Authorize]
-Attribut, um das Token zu lesen? Ich denke, dass Token ein guter Weg sind. Die Formularauthentifizierung basiert auf Cookies für das Web. Nicht die beste Ideensituation für alle Nicht-Browser-Clients.
Was ich vorschlagen würde, ist das Erstellen eines benutzerdefinierten AuthorizationFilterAttribute und das Überschreiben der OnAuthorization-Methode. Bei dieser Methode können Sie prüfen, ob ein Token vorhanden ist, das Sie an den Client ausgegeben haben, nachdem Sie gültige Anmeldeinformationen angegeben haben. Sie können dieses Attribut für jede Methode oder jeden Controller verwenden, die Sie validieren möchten. Hier ist ein Beispiel, auf das Sie sich beziehen könnten
public class AuthorizeTokenAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext != null)
{
if (!AuthorizeRequest(actionContext.ControllerContext.Request))
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized) { RequestMessage = actionContext.ControllerContext.Request };
}
return;
}
}
private bool AuthorizeRequest(System.Net.Http.HttpRequestMessage request)
{
bool authorized = false;
if (request.Headers.Contains(Constants.TOKEN_HEADER))
{
var tokenValue = request.Headers.GetValues("TOKEN_HEADER");
if (tokenValue.Count() == 1) {
var value = tokenValue.FirstOrDefault();
//Token validation logic here
//set authorized variable accordingly
}
}
return authorized;
} }
TOKEN_HEADER ist nur eine Zeichenfolge, die einen HTTP-Header darstellt, den der Client für authentifizierte Anforderungen zurückgeben soll.
Lass uns durchgehen
Überprüfen Sie auch diesen Beitrag von John Petersen. Die Sicherheit Ihres ASP.NET-Web-APIs sicherstellen
Es gibt viele Möglichkeiten, Benutzer für einen REST - Dienst zu authentifizieren. Die Verwendung von Token ist möglich, aber die Verwendung von Basic Authentication ist noch einfacher und so standard und plattformübergreifend wie möglich.
Verwechseln Sie nicht authorisation mit authentication . Das Attribut [Authorize] befasst sich ausschließlich mit der Autorisierung, jedoch nur, nachdem ein Benutzer mit einem anderen Mechanismus authentifiziert wurde. Die Autorisierung ist völlig unbrauchbar, ohne vorher eine korrekte Authentifizierung durchzuführen.
Die beste Ressource zum Überprüfen ist Dominick Baier Wer ist ein Experte für das Thema.
Ich verwende einen sehr einfachen Ansatz:
der Dienst mit diesem Ansatz, der die neue ASP.NET MVC-Web-API verwendet, kann jeden Client-Typ bedienen: Browser/Javascript und native (Desktop oder Mobile) usw.
Sie können ActionFilterAttribute verwenden und die OnActionExecuting-Methode überschreiben ..__ Registrieren Sie diesen Filter später in global.cs, um diesen Filter für alle derartigen Aktionen in Application Start-Methode anzuwenden
var config = GlobalConfiguration.Configuration; config.Filters.Add (new CustomAuthAttribute ());
{ Namespace Customss { Öffentliche Klasse CustomAuthAttribute: ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
// To inforce HTTPS if desired , else comment out the code
if (!String.Equals(actionContext.Request.RequestUri.Scheme, "https", StringComparison.OrdinalIgnoreCase))
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest)
{
Content = new StringContent("HTTPS Required")
};
return;
}
// get toekn from the header
var userToken = actionContext.Request.Headers.GetValues("UserToken");
// Customer Logic to check the validity of the token.
// U can have some DB logic to check , custom STS behind or some loca cache used to compare the values
}
}
} }