0

J'ai une application MVC/Angular qui implémente l'authentification d'identité basée sur les cookies pour avoir un mécanisme unique d'autorisation/d'authentification des utilisateurs, que l'action du contrôleur renvoie une page MVC ou un résultat Json. Pour simplifier, mes projets web api font partie de la solution web afin qu'ils puissent être facilement déployés en même temps. Maintenant, j'ai un fournisseur qui veut faire des demandes json ou éventuellement xml pour les données. J'utilise WebApi 2 et MVC 5 J'ai donc besoin de créer une autre API. Mes exigences sontAppel d'une validation de jeton de support depuis un objet AuthorizationFilterAttribute

  1. hôte l'Api dans le site Web pour faciliter le déploiement
  2. Fixez le api avec des jetons Bearer
  3. Faire aucun autre changement de code je ne peux pas supprimer les cookies pour les demandes de l'API comme je l'aurais besoin pour apporter des modifications à chaque rappel (les scripts clients ne sont pas très centralisés ... nous apprenions Angular comme nous construisons le site) Comme ce fournisseur ne demande que des données, je peux contourner l'utilisation de l'attribut Authorize et créer un attribut personnalisé dérivé à partir de AuthorizationFilterAttribute pour le fournisseur uniquement les appels Api. J'ai aussi un simple fournisseur de serveur d'autorisation dérivé de OAuthAuthorizationServerProvider. Je peux créer un jeton et le renvoyer à mon filtre personnalisé en tant que jeton support dans l'en-tête auth sans problème. Ma question est maintenant quoi? Dois-je créer une instance par requête de ma classe dérivée de OAuthAuthorizationServerProvider et appeler une substitution sur cette classe pour l'authentification? (J'utilise StructureMap) Ou est-ce qu'il y a une autre façon que je suis juste manquant. Je peux trouver un million d'exemples de création d'un filtre pour gérer l'authentification de base, mais tout ce qui concerne le support utilisé jusqu'ici utilise le pipeline katana pour valider le jeton support

Répondre

0

C'était plus facile que je ne le pensais. En ajoutant un attribut d'autorisation personnalisé aux points de terminaison qui ont requis des jetons de support.

[BearerTokenAuthorizationFilter(Role = "Vendor")] 
    [Route("api/v1/purchaseorders/{records:int?}")] 
    [ResponseType(typeof(Dictionary<string, VendorPurchaseOrder>))] 
    public IHttpActionResult GetNewPurchaseOrders(int records = 0) 

Ceci a complètement ignoré le cookie.