Désactiver l'Authentification Windows pour WebAPI
Je suis à jouer avec un MVC4 application et l'utilisation de WebAPI pour récupérer/envoyer toutes mes données. Dans un contrôleur, je suis en utilisant un HttpClient demande pour obtenir les données et tous fonctionne bien. La question que je pose est que lorsque l'authentification Windows est activé dans le projet, le web, les appels d'API sont de retour une erreur 401 non autorisée.
le code dans mon contrôleur qui ne l'appelant est:
using (var client = new HttpClient())
{
var invoiceDetailUrl = BASE_URL + Url.HttpRouteUrl(
"DefaultApi",
new { controller = "InvoiceDetails", id = id }
);
var result = client.GetAsync(invoiceDetailUrl).Result;
}
L'authentification Windows doit être sur le site, mais pas nécessairement les contrôleurs d'API Web. J'ai essayé à l'exclusion de l'API de contrôleurs dans le web.config comme ci-dessous:
<location path="api">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
mais les ajouts sur le web.config n'a rien fait.
Des suggestions?
- Jamais tu trouves une solution pour cela? Je suis à la recherche de la même chose.
- oui je l'ai fait, j'ai trouvé que vous avez besoin pour ce faire: HttpClientHandler handler = new HttpClientHandler(); gestionnaire.UseDefaultCredentials = true; using (var client = new client http(handler)) { } }
- Où et comment avez-vous ajouter cet? sur la page principale? voulez-vous m'envoyer un exemple de code? (ASP.NET site Intranet à l'aide de Visual Studio 2013 - .NET 4.5 Framework)
Vous devez vous connecter pour publier un commentaire.
Authentification
Web API suppose que l'authentification se passe dans le pays hôte. IIS utilise HTTP modules pour l'authentification. asp.net maintenant, vous permettent de configurer via le web.config tout les modules d'authentification intégrée dans IIS ou ASP.NET ou écrire votre propre module HTTP pour effectuer une authentification personnalisée.
Vous pouvez utiliser plusieurs authentifications dans le même temps, ce n'est pas un problème.
Dans votre cas, vous avez besoin la fois l'authentification Windows & authentification Anonyme.
L'authentification Windows sécurisé votre Site web, et l'authentification Anonyme sera ouvrir votre Api Web.
Configurer l'Authentification IIS
Hébergement sur IIS Express
Ouvrez le volet Propriétés (via F4 et pas les propriétés du projet), et d'appliquer d'authentification souhaitée
Définir "l'Authentification Anonyme" sur "Désactivé".
Définir "l'Authentification Windows" à "Activé".
Hébergement sur IIS 7 ou une version ultérieure
Dans le Gestionnaire des services IIS, ouvrez la fonction d'Authentification dans la Vue des fonctionnalités. Activer/Désactiver l'authentification souhaitée. Si un système d'authentification n'est pas une option (comme Windows), vous aurez besoin de l'installer via le Gestionnaire de Serveur (Ajouter des Services de Rôle).
Autorisation
asp.net Autorisation
Dans ASP.NET il y a deux façons de procéder pour autoriser l'accès à une ressource donnée: Fichier et l'autorisation d'Url. Je ne vais pas expliquer ici, mais vous pouvez lire ce l'article.
La chose importante est que vous pouvez autoriser/refuser à des utilisateurs et/ou groupes dans le web.config.
La configuration par défaut dans Windows authentification pour autoriser uniquement les utilisateurs de l'authentification *****, comme ceci :
Si vous souhaitez autoriser les utilisateurs anonymes ? en vertu de l'adresse url "api", ajoute ceci :
Web Api D'Autorisation
asp.net Web Api d'Autorisation qui se produit plus tard dans le pipeline, les plus proches du contrôleur. Qui permet de faire plus de nombreuses options lorsque vous accorder l'accès aux ressources.
Web API fournit un haut-autorisation de filtre, AuthorizeAttribute. Il y a aussi un AllowAnonymousAttribute.
Vous pouvez l'utiliser à l'échelle Mondiale, d'un Contrôleur ou sur une action.
Par défaut, toutes les actions sont autorisé.
Tests Api
Via Un Navigateur
L'authentification Windows intégrée fonctionne avec n'importe quel navigateur qui prend en charge la négociation de schéma d'authentification. C'est le cas pour Internet Explorer et maintenant google Chrome : ils vont fournir automatiquement des informations d'Identification Windows lors de la navigation sur un Site Web avec authentification Windows. Firefox ne prend pas en charge ce système, j'ai donc souvent tester l'authentification avec ce navigateur.
Via HttpClient
Votre HttpClient doit fournir des informations d'Identification lors de l'appel de l'Api Web (comme les navigateurs). Ceci est fait par la configuration d'un HttpClientHandler avec les informations d'identification appropriées.
Espère que cela va vous aider.
Une dernière chose importante dans votre cas, c'est que votre site Web Api n'autorise pas les utilisateurs anonymes à tous les ! Parce que vous êtes à l'aide de informations d'Identification par Défaut dans votre HttpClientHandler, cela signifie que votre service requiert l'authentification Windows. Vous n'avez pas à configurer les informations d'identification dans un & de la fonction publique.
//use default credentials aka Windows Credentials ...
) ? Je pense que je vais utiliser le nom d'utilisateur/mot de passe ou les informations d'identification windows de code, mais je ne suis pas sûr où les ajouter. (J'ai un intranet à l'aide de la vue asp.net 4.5 framework et Visual Studio 2013 avec IIS7.5 sur un Windows Serveur 2008R2).Je suis tombé sur cette question, tout en essayant de faire quelque chose de très similaire et je voulais ajouter à la réponse donnée ci-dessus. Je n'ai pas trouvé beaucoup d'informations détaillées sur la façon de faire. Juste bits et d'un morceau sur le web. Donc j'espère que cela va ajouter à ce qui existe.
J'ai un MVC4 application qui a une WebAPI part. Le MVC application doit utiliser l'Authentification Windows, mais la WebAPI partie devait être anonyme et avoir de l'Authentification Windows désactivé. Alors que la solution ci-dessus a travaillé pour ncbl, il ne fonctionne pas pour moi parce que dans mon scénario, je n'étais pas à l'aide de code pour gérer les informations d'identification. Dans mon scénario, je voulais un site web.config IIS ou en fonction de la solution. J'ai commencé avec Cybermaxs web.config solution et ajouté à ça. Voici ce que j'ai fini avec.
Pour moi, l'essentiel était d'ajouter le
<system.webServer>
article pour le web.config pour que je puisse remplacer l'authentification pour ce chemin d'accès virtuel. J'ai essayé de le faire dans IIS, mais depuis qu'il a été un chemin d'accès virtuel, c'est à dire /api n'existe pas sur le serveur web, ce n'était pas possible pour moi.Note: attention, IIS peut avoir un fichier de config à un niveau supérieur de la configuration qui est le verrouillage de l'
<authentication>
section, comme dans l'application.config ou à la machine.config. Un élément peut avoir l'attribut de la directive allowOverride définie sur false. J'ai été faire une Erreur HTTP 500.19 (HRESULT: 0x80070021) à la première et a dû aller dans l'application.fichier de configuration pour modifier cet attribut. J'ai trouvé plus de détails sur cette erreur ici.Une fois que j'ai eu cette section supplémentaire dans le
<location>
section de mon site web.config j'ai pris soin de décorer mon api contrôleur avec[AllowAnonymous]
. Et puis bam...tout a commencé à travailler.C'est de cette façon que j'ai d'authentification et d'autorisation de l'installation à la racine de mon application.
C'est ce que je devais faire: