net mvc enable asp allow asp.net-mvc asp.net-web-api cors owin katana

asp.net mvc - mvc - CORS no está funcionando en la API web con autenticación OWIN



enable cors web config (3)

Especialmente si tiene problemas con el token de portador API web al usar CORS, no olvide poner "TOKEN" en la lista de sus métodos permitidos.

Por favor, ponga el código en su system.webServer of web.config, así es como resolví el mío

<customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE, TOKEN" /> </customHeaders>

En mi aplicación estoy usando API web con autenticación basada en tokens con soporte CORS, pero cuando el cliente solicita el token, ocurre un error debido a CORS (Solicitud de origen cruzado bloqueado: la misma política de origen no permite leer el recurso remoto en (mi sitio) nombre). Esto se puede arreglar moviendo el recurso al mismo dominio o habilitando CORS.)

Había configurado todo lo necesario para el soporte de CORS (creo). aquí mi configuración

Owin start up class

public class Startup { public void Configuration(IAppBuilder app) { var config = new HttpConfiguration { DependencyResolver = new StructureMapWebApiDependencyResolver(container) }; WebApiConfig.Register(config); // registering web api configuration app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); // cors for owin token pipeline app.UseWebApi(config); ConfigureOAuth(app); } public void ConfigureOAuth(IAppBuilder app) { var oAuthAuthorizationServerOptions = new OAuthAuthorizationServerOptions() { AllowInsecureHttp = true, TokenEndpointPath = new PathString("/token"), AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), Provider = new SimpleAuthorizationServerProvider() }; // Token Generation app.UseOAuthAuthorizationServer(oAuthAuthorizationServerOptions); app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); } }

Y mi configuración webapi

public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.EnableCors(); // Corse support for Web api config.MapHttpAttributeRoutes(); // attribute based urls config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }

aquí configuración en web.config

<system.webserver> <httpProtocol> <customHeaders> <!-- Adding the following custom HttpHeader will help prevent CORS from stopping the Request--> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE" /> </customHeaders> </httpProtocol> </system.webserver>

y mi encabezado de solicitud de mozilla

Accept application/json, text/plain, */* Accept-Encoding gzip, deflate Accept-Language en-US,en;q=0.5 Content-Length 67 Content-Type application/x-www-form-urlencoded; charset=UTF-8 Host talenterp Origin http://192.168.1.11:85 Referer http://192.168.1.11:85/ User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0

Las URL de las aplicaciones son

Aplicación de servidor (que debería ser compatible con CORS)

{http://talenterp}

Token end point:

{http://talenterp/token}

Aplicación de cliente

{http://talentmvc:85}

NB: Ya agregué

context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });

en el método GrantResourceOwnerCredentials () de mi AuthorizationServerProvider


Asegúrate de tener solo

app.UseCors (Microsoft.Owin.Cors.CorsOptions.AllowAll);

configurado, y no también el antiguo estilo ''config.EnableCors ()'' en su Global.asax o WebApiConfig. Además: coloca la declaración anterior como la primera en tu clase de Inicio de owin . Sí, eso realmente hace la diferencia, configurarlo más tarde también puede hacer que cors no funcione.

public partial class Startup { public void Configuration(IAppBuilder app) { app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); ... etc


OWIN y Microsoft.AspNet.WebApi.Cors son dos bibliotecas separadas y cada una necesita una configuración separada.

Deshabilite el uso de CORS con OWIN:

public void Configuration(IAppBuilder app) { //app.UseCors(CorsOptions.AllowAll);

Busque el método GrantResourceOwnerCredentials y agregue Access-Control-Allow-Origin al contexto para que, cuando devuelve una llamada una vez completada la autenticación, el navegador encuentre el encabezado y lo acepte.

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "http://localhost" });

Ahora instale el paquete Microsoft.AspNet.WebApi.Cors de Nuget en su proyecto webapi, y agréguelo al método Register

public static void Register(HttpConfiguration config) { var cors = new EnableCorsAttribute("http://localhost, ", "accept,accesstoken,authorization,cache-control,pragma,content-type,origin", "GET,PUT,POST,DELETE,TRACE,HEAD,OPTIONS"); config.EnableCors(cors);

Esto lo hizo por mí.