Authentification multi-plateforme à l’aide de l’API Web ASP.NET

Comment puis-je même commencer à coder l’authentification à l’aide de l’API Web ASP.NET? J’ai 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:

  1. Si non, comment puis-je corriger l’atsortingbut [Authorize] pour lire le jeton?
  2. Comment générer ce jeton? Je ne pense pas pouvoir utiliser formsauthentication car cela utilise des cookies.
  3. Comment gérer l’autorisation réelle, le client envoie-t-il un mot de passe et un nom d’utilisateur bruts, puis je génère le jeton ou existe-t-il un autre moyen?
  4. Comment est-ce que je gère quand mon site Web l’utilise? J’ai entendu dire que cela est géré différemment d’une application, par exemple pour obtenir le domaine et l’autoriser.

Je pense que les jetons seraient un bon moyen de continuer. L’authentification par formulaire est basée sur les cookies pour le Web. Cependant, ce n’est pas la situation la plus courante pour tous les clients autres que les navigateurs.

Ce que je suggère, c’est de créer un AuthorizationFilterAtsortingbute personnalisé et de remplacer la méthode OnAuthorization. Dans cette méthode, vous pouvez vérifier l’existence d’un jeton que vous avez envoyé au client après avoir fourni des informations d’identification valides. Vous pouvez utiliser cet atsortingbut sur n’importe quelle méthode ou contrôleur que vous souhaitez valider. Voici un exemple que vous pourriez citer

  public class AuthorizeTokenAtsortingbute : AuthorizationFilterAtsortingbute { 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 passons à travers

  1. Le client demande des données sécurisées
  2. Le client n’est pas autorisé, retourne une réponse avec un code d’état non autorisé
  3. Le client envoie les informations d’identification pour s’authentifier, qui doivent être sécurisées via HTTPS
  4. Une fois validé, le client reçoit un jeton via un en-tête HTTP ou tout ce qui fonctionne pour vous
  5. Le client essaie de demander à nouveau des données sécurisées, cette fois, il joint le jeton à la demande
  6. AuthorizeTokenAtsortingbute validera le jeton et autorisera l’exécution de l’action.

Aussi, vérifiez ce post par John Petersen. Rendre votre API Web ASP.NET sécurisée

Il existe de nombreuses façons d’authentifier les utilisateurs pour un service REST. L’utilisation de jetons est possible, mais l’utilisation de l’ authentification de base est encore plus simple et standard.

Ne confondez pas l’ autorisation avec l’ authentification . L’atsortingbut [Authorize] concerne uniquement l’autorisation, mais seulement après qu’un utilisateur a été authentifié à l’aide d’un autre mécanisme. L’autorisation est complètement inutile sans authentification préalable.

La meilleure ressource à vérifier est Dominick Baier, expert en la matière.

J’utilise une approche très simple:

  1. définir un profil d’access avec ses accessId et accessKey uniques (par exemple, valeur GUID hachée MD5)
  2. stocker ce profil d’access dans la firebase database
  3. chaque requête (GET / POST / etc.) doit fournir accessId, queryHash (la valeur de hachage MD5 représente la requête) et la signature (valeur de hachage MD5 de queryHash + accessKey). Bien sûr, le client doit conserver accessKey dans un endroit sécurisé !!!
  4. le serveur obtient la demande vérifie le accessId et la signature en utilisant le même algorithme de calcul pour rejeter ou accorder l’access (authentifier)
  5. une autre autorisation peut être effectuée sur la base du type de demande en utilisant le profil d’access

le service avec cette approche utilisant la nouvelle API web ASP.NET MVC peut servir quel que soit le type de client: browser / javascript et native (desktop ou mobile) etc.

Vous pouvez utiliser ActionFilterAtsortingbute et remplacer la méthode OnActionExecuting. Plus tard, enregistrez ce filtre dans global.cs pour appliquer ce filtre à toutes les actions comme celle-ci dans la méthode Application Start

var config = GlobalConfiguration.Configuration; config.Filters.Add (new CustomAuthAtsortingbute ());

{espace de noms Customss {Classe publique CustomAuthAtsortingbute: ActionFilterAtsortingbute

 { public override void OnActionExecuting(HttpActionContext actionContext) { // To inforce HTTPS if desired , else comment out the code if (!Ssortingng.Equals(actionContext.Request.RequestUri.Scheme, "https", SsortingngComparison.OrdinalIgnoreCase)) { actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest) { Content = new SsortingngContent("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 } } 

}}