WebAPI de la SCRO avec l'Authentification Windows - option autoriser l'accès Anonyme demande
J'ai un WebAPI 2 service de REPOS en cours d'exécution avec l'Authentification Windows. Il est hébergé séparément sur le site, donc j'ai activé la SCRO à l'aide de la ASP.NET la SCRO package NuGet. Mon client site est en utilisant AngularJS.
Jusqu'à présent, voici ce que j'ai vécu:
- Je n'avais pas withCredentials ensemble, de sorte que la SCRO les demandes de retour d'un 401. Résolu en ajoutant withCredentials de mon $httpProvider config.
- Côté, j'avais mis mon EnableCorsAttribute avec un générique d'origine, qui n'est pas autorisé lors de l'utilisation d'informations d'identification. Résolu en définissant la liste explicite des origines.
- Cela a permis à mes demandes pour réussir, mais mon POST a publié une demande de contrôle en amont, et je n'avais pas créé de contrôleur des actions pour soutenir les OPTIONS de verbe. Pour résoudre ce problème, j'ai mis en place un MessageHandler comme une des OPTIONS globales de gestionnaire. Il renvoie simplement à 200 pour toute demande d'OPTIONS. Je sais que ce n'est pas parfait, mais il fonctionne pour l'instant, dans un violon.
Où je suis collé à mon Angulaire de contrôle en amont des appels ne sont pas compris les informations d'identification. Selon cette réponse, c'est par la conception, comme les OPTIONS les demandes sont conçus pour être anonyme. Cependant, l'Authentification Windows est l'arrêt de la demande avec un 401.
J'ai essayé de mettre le [AllowAnonymous] attribut sur mon MessageHandler. Sur mon dev ordinateur, il fonctionne - OPTIONS verbes ne nécessitent pas d'authentification, mais d'autres verbes faire. Lorsque je créer et déployer le serveur de test, si, je suis en continuant à obtenir un 401 de ma demande.
Est-il possible d'appliquer [AllowAnonymous] sur mon MessageHandler lors de l'utilisation de l'Authentification Windows? Dans ce cas, les conseils sur la façon de le faire? Ou est-ce le mauvais trou de lapin, et je devrais être à la recherche à une approche différente?
Mise à JOUR:
J'ai été en mesure de l'obtenir pour fonctionner en définissant à la fois l'Authentification Windows et l'Authentification Anonyme sur le site dans IIS. Cela a causé tout pour autoriser les connexions anonymes, donc j'ai ajouté un filtre global de l'Autoriser, tout en conservant la AllowAnonymous sur mon MessageHandler.
Cependant, cela se sent comme un hack...j'ai toujours entendu qu'une seule méthode d'authentification doit être utilisé (pas de mélange). Si quelqu'un a une meilleure approche, je vous en serais reconnaissant entendu parler de lui.
J'ai utilisé ce guide codeproject.com/Articles/1119206/... (publié en 2016), qui est très similaire à la plupart des réponses ci-dessous
OriginalL'auteur Dave Simione | 2014-12-11
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé l'auto-hébergement avec HttpListener et à la suite de la solution a fonctionné pour moi:
Comment puis-je obtenir appBuilder instance dans webApiConfig.cs Registre Méthode?
OriginalL'auteur Igor Tkachenko
J'ai lutté pendant un certain temps à faire de la SCRO demandes de travaux dans les contraintes suivantes (très semblables à celles de l'OP):
Ma configuration finale est la suivante:
web.config - permettre non authentifié (anonyme) de contrôle en amont des demandes (OPTIONS)
mondiale.asax.cs - répondre correctement avec les en-têtes qui permettent de l'appelant à partir d'un autre domaine pour recevoir des données
De la SCRO permettant
Je vais essayer sans l'autorisation, même si je pense que c'est nécessaire lorsque seule l'Authentification Windows est activé dans IIS et les Options doivent être activées pour demande non authentifiée. Merci.
OriginalL'auteur Alexei
C'est une solution beaucoup plus simple-un peu de lignes de code pour permettre à toutes les "OPTIONS" demandes efficacement emprunter l'identité du pool d'application du compte. Vous pouvez garder Anonymes Éteint, et configurer la SCRO politiques par les pratiques habituelles, mais ensuite, ajoutez les lignes suivantes à votre global.asax.cs:
OriginalL'auteur willman
Je l'ai résolu d'une manière très similaire, mais avec quelques détails et axée sur le service oData
Je n'ai pas désactiver l'authentification anonyme dans IIS car j'en avais besoin pour la requête POST
Et j'ai ajouté Mondiale.aspx (en Ajoutant
MaxDataServiceVersion
dansAccess-Control-Allow-Headers
) le même code que ci-dessuset
WebAPIConfig.cs
et AngularJS appel
OriginalL'auteur Fran Rodriguez
Dave,
Après avoir joué avec de la SCRO paquet, c'est ce qu'il fait à travailler pour moi: [EnableCors(origines: "", en-têtes: "", les méthodes: "*", SupportsCredentials=true)]
J'ai dû activer SupportsCredentials=true. Les origines,les en-Têtes, et les Méthodes sont toutes de la valeur "*"
asp.net/web-api/overview/security/... l'Article: transmission des informations d'Identification dans les Requêtes d'Origine de La SCRO spec indique également que la configuration d'origine de "" n'est pas valide si SupportsCredentials est vrai. Vous devez fournir les origines que vous souhaitez autoriser, plutôt que d'utiliser ""
OriginalL'auteur jr3
désactiver l'authentification anonyme dans IIS si vous n'en avez pas besoin.
Que d'ajouter ceci dans votre global asax:
Assurez-vous que lorsque vous activez la scro vous activez également les informations d'identification de l'utilisation, comme:
Comme vous pouvez le voir j'ai activer la SCRO à l'échelle mondiale et à l'aide de l'application BeginRequest crochet je authentifier toutes les OPTIONS de demandes pour l'api (Api Web) et le odata demandes (si vous l'utilisez).
Cela fonctionne bien avec tous les navigateurs, dans le côté client, n'oubliez pas d'ajouter le xhrFiled withCredentials comme indiqué ci-dessous.
J'essaie de trouver une autre solution en évitant d'utiliser le crochet, mais sans succès jusqu'à présent,
Je voudrais utiliser le web.de configuration config à faire quelque chose comme ce qui suit:
AVERTISSEMENT LA CONFIGURATION CI-DESSOUS NE FONCTIONNE PAS!
OriginalL'auteur Norcino
D'autres solutions que j'ai trouvées sur le web ne fonctionne pas pour moi ou semblait trop hacky; à la fin, je suis venu avec une plus simple, et la solution de travail:
web.config:
Propriétés du projet:
Windows Authentication
Anonymous Authentication
Le programme d'installation de la SCRO:
Cela nécessite Microsoft.Owin.La scro assemblée qui est disponible sur NUget.
Angulaire de l'initialisation:
OriginalL'auteur Vedran
C'est ma solution.
Mondiale.asax*
OriginalL'auteur Dblock247