Comment faire de la SCRO l'Authentification dans WebAPI 2?
Le scénario est simple, j'ai besoin de vous connecter à partir d'un autre serveur (différente de l'API serveur) pour récupérer le jeton d'accès.
J'ai installé Microsoft.Owin.Cors
package sur le Serveur d'API. Dans Startup.Auth.cs
fichier, sous public void ConfigureAuth(IAppBuilder app)
, j'ai ajouté dans
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
Dans WebApiConfig.cs
, sous public static void Register(HttpConfiguration config)
, j'ai ajouté ces lignes:
//Cors
var cors = new EnableCorsAttribute("*", "*", "GET, POST, OPTIONS");
config.EnableCors(cors);
Quoi d'autre dois-je changer?
- app.UseCors(CorsOptions.AllowAll) - permet la SCRO pour toutes les origines des demandes de votre site. config.EnableCors(..) permet de la SCRO pour les Api Web seulement
Vous devez vous connecter pour publier un commentaire.
Regarder ce que j'ai trouvé!!!
Ajouter des en-têtes personnalisés à l'intérieur de
<system.webServer>
.Alors je peux faire de la SCRO d'authentification.
Content-Type
à la liste d'en-tête pour le faire fonctionner avecfetch
bien.J'ai eu de nombreux essais et d'erreurs d'installation pour AngularJS-web basé sur le client.
Pour moi, ci-dessous approches travaille avec ASP.NET WebApi 2.2 et OAuth à base de services.
Microsoft.AspNet.WebApi.Cors
package nuget.Microsoft.Owin.Cors
package nuget.config.EnableCors(new EnableCorsAttribute("*", "*", "GET, POST, OPTIONS, PUT, DELETE"));
au-dessus deWebApiConfig.Register(config);
ligne à de Démarrage.cs fichier.app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
à la de Démarrage.Auth.cs fichier. Cela doit être fait avant de faire appel àIAppBuilder.UseWebApi
J'ai trouvé beaucoup de configuration de variations et de combinaisons à ici stackoverflow ou les articles de blog. Donc, Blaise approche peut ou ne peut pas être mauvais. C'est juste un autre paramètres, je pense.
app.UseCors
etconfig.EnableCors
méthodes, respectivement, mais la OWIN/token
point de terminaison semble être traitée d'une manière particulière et n'est pas l'envoi de l'Access-Control-Allow-Origin-Tête HTTP de la réponse. Cela est vrai même lorsque la mise en œuvre de la stratégie personnalisée de la solution par Konstantin Tarkus ci-dessous.Microsoft.Owin.Cors
ainsiAprès de nombreuses heures de recherche et de regarder de nombreuses de nombreuses solutions différentes de ce que j'ai réussi à le faire fonctionner comme par le dessous.
Il y a un certain nombre de raisons que cela se passe. Très probablement, vous avez de la SCRO activé dans le mauvais endroit ou il est activé deux fois ou pas du tout.
Si vous utilisez l'API Web et Owin Jeton point de fin, vous devez supprimer toutes les références à la SCRO dans votre site Web méthode de l'API et ajoutez la bonne owin méthode parce que l'api web de la scro ne fonctionnera pas avec un Jeton d'extrémité, tandis que Owin de la scro de travail pour les deux API Web et un Jeton d'authentification des points de fin permet donc de commencer:
Assurez-vous que vous avez la Owin de la Scro paquet installé Supprimer toute la ligne
que vous avez, par exemple.config.EnableCors(); à partir de votre WebAPIconfig.cs fichier
Aller à votre démarrage.cs fichier et assurez-vous que vous exécutez Owin de la Scro
avant tous les autres de configuration s'exécute.
app.UseCors(Microsoft.Owin.La scro.CorsOptions.AllowAll);
ConfigureAuth(app);
Si votre problème persiste, allez à: le Démarrage.Auth.cs et assurez vous d'avoir les lignes suivantes dans votre ConfigureAuth méthode (vous ne devriez pas avoir besoin de cette si votre démarrage.cs fichier est correct)
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
web.config
De démarrage.cs
Note:
app.UserCors(...)
doit être appelée avant la configuration de la ASP.NET l'Identité.Source: ASP.NET Application Web Starter Kit (ASP.NET l'API Web, de l'Identité, SignalR)
.EnableCors()
dans votre OWIN pipeline n'importe. Vous souhaitez mettre en avant d'autres OWIN middleware choses.D'élaborer sur Youngjae réponse, il y a un bon tutoriel sur la configuration d'OWIN avec l'API Web et l'activation de la SCRO dans le processus de http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/
Vous devrez ajouter le package NuGet pour la SCRO avec la commande:
Install-Package Microsoft.Owin.Cors -Version 2.1.0
Puis ajouter
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
à votre méthode de Configuration de Démarrage.cs de sorte qu'il ressemble à quelque chose comme:
app.UseCors
etconfig.EnableCors
méthodes, respectivement, mais la OWIN/token
point de terminaison semble être traitée d'une manière particulière et n'est pas l'envoi de l'Access-Control-Allow-Origin-Tête HTTP de la réponse. Cela est vrai même lorsque la mise en œuvre de la stratégie personnalisée de la solution par Konstantin Tarkus ci-dessous.La réponse pour moi a été trouvé à
Web Api 2 contrôle en amont de la SCRO demande au Porteur de Jeton
Spécifiquement, le /demande de Jeton à l'aide d'une mise en œuvre de OAuthAuthorizationServerProvider.GrantResourceOwnerCredentials a été l'ajout de l'en-tête de nouveau. Ajouter le OWIN de la SCRO choses avant les autres OWIN de config, et de supprimer l'en-tête de GrantResourceOwnerCredentials, comme par un lien, et le tour est joué.
Bonne chance.
Je veux juste partager mon expérience. J'ai passé la moitié de la journée à se taper la tête et en essayant de le faire fonctionner. J'ai lu de nombreux articles et des questions et à la fin j'ai compris ce qui n'allait pas.
La ligne
n'était pas le premier dans
Startup
classeConfiguration
méthode. Quand je l'ai déplacé vers le haut, tout a commencé à travailler comme par magie.Et pas d'en-têtes personnalisés en
web.config
ouconfig.EnableCors(corsPolicy);
ou n'importe quoi d'autre est nécessaire.Espère que cela aidera quelqu'un pour gagner du temps.
Vous pouvez trouver ici les multiples façons, vous devez activer la SCRO à différentes portées: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
De toute façon j'ai eu le même problème, et en ajoutant des en-têtes dans les différentes manières de ne pas obtenir la solution complète.
J'ai trouvé que l'IIS utilise des gestionnaires qui remplace votre SCRO web app config si vous ne spécifiez pas le contraire.
Dans mon cas, j'ai également eu à supprimer l'utilisation de IIS gestionnaires par l'ajout de la configuration suivante au Web principal.config de mon application:
Être conscient que cette configuration peut être définie par défaut lorsque vous créez un nouveau projet en fonction du type d', mais si vous commencez à partir de zéro, vous allez ajouter cette config.
Ajoutant à la clientèle en-Têtes ne pourrait pas vous donner autant de liberté dans la personnalisation de vos besoins de sécurité. Il ouvre toutes les autres partie de l'api pour le monde. Le code suivant seulement que pour le "jeton", le contrôleur et l'autre partie de l'api doivent être fait par le biais EableCors annotation.
Pour activer la Scro, suivez les instructions ici.
Lors de l'utilisation d'OWIN middleware pour traiter de la SCRO, nous n'avons pas besoin d'ajouter des en-têtes sur le WebAPIConfig ou le web.fichier de configuration. Oui, l'ajout d'en-têtes sur le web.fichier de configuration fonctionne lorsque vous voulez un accès public, mais si vous avez besoin de limiter l'accès sur la base d'une liste blanche (domaines), permettant ensuite Tous l'accès n'est plus ce que vous voulez faire.
Avec OWINS, nous pouvons gérer cela par la mise en œuvre de ce gestionnaire:
Avec ce gestionnaire, nous pouvons détecter la méthode de la requête (OPTIONS, la POSTE...) et si la demande doit être traitée comme une autorisation ou Jeton de point de terminaison. C'est la zone où la logique peut être ajouté afin de vérifier l'Origine de l'en-tête (demande) et de valider si ce domaine doivent être autorisés par l'ajout de l'en-tête de réponse Access-Control-Allow-Origin.
Pour plus d'information sur ce, regardez ce lien: http://www.ozkary.com/2016/04/web-api-owin-cors-handling-no-access.html
Complète Soluction. Vous avez juste besoin de modifier certains fichiers, fonctionne pour moi.
Mondiale.ascx
WebApiConfig.cs
Tous la demande a appeler ce code.
Certains Contrôleur
Rien à changer.
Web.config
Vous avez besoin d'ajouter des gestionnaires dans vous web.config