Comment puis-je même commencer à coder l'authentification à l'aide de l'API Web ASP.NET pour permettre la prise en charge multiplate-forme des ordinateurs de bureau, mobiles et Web? J'avais lu certaines méthodes d'authentification RESTful, telles que l'utilisation de jetons dans l'en-tête.
Existe-t-il des exemples de projets utilisant cette méthode?
Des questions:
[Authorize]
pour lire le jeton? Je pense que les jetons seraient un bon moyen d’aller. L'authentification par formulaire est basée sur des cookies pour le Web. Pas la situation la plus idée pour tous les clients non-navigateur cependant.
Ce que je suggérerais, c'est de créer un AuthorizationFilterAttribute personnalisé et de remplacer la méthode OnAuthorization. Avec cette méthode, vous pouvez vérifier l'existence d'un jeton que vous avez émis au client après avoir fourni des informations d'identification valides. Vous pouvez utiliser cet attribut sur n'importe quelle méthode ou contrôleur que vous souhaitez valider. Voici un exemple que vous pourriez citer
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 est simplement une chaîne représentant un en-tête HTTP que le client doit renvoyer pour les demandes authentifiées.
Alors parcourons-le
Aussi, vérifiez ce post par John Petersen. Sécuriser vos API Web ASP.NET
Il existe de nombreuses façons d'authentifier les utilisateurs pour un service REST. Il est possible d’utiliser des jetons, mais l’utilisation de Authentification de base est encore plus simple et standard.
Ne confondez pas autorisation avec authentification . L'attribut [Autoriser] concerne uniquement l'autorisation, mais uniquement après qu'un utilisateur a été authentifié à l'aide d'un autre mécanisme. L'autorisation est totalement inutile sans une authentification correcte préalable.
La meilleure ressource à vérifier est Dominick Baier qui est un expert en la matière.
J'utilise une approche très simple:
le service utilisant cette approche à l'aide de la nouvelle API Web ASP.NET MVC peut servir n'importe quel type de client: navigateur/javascript et natif (ordinateur de bureau ou mobile), etc.
Vous pouvez utiliser ActionFilterAttribute et substituer la méthode OnActionExecuting . Plus tard, inscrivez ce filtre dans global.cs pour appliquer ce filtre à toutes les actions de ce type dans la méthode Application Start.
var config = GlobalConfiguration.Configuration; config.Filters.Add (new CustomAuthAttribute ());
{ namespace Customss { Classe publique 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
}
}
} }