Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

483
Vistas
Solicitud de CORS en Ajax contra formularios web de asp.net con autorización de Identity Server 4

Actualmente estoy trabajando en un sitio que utiliza varias solicitudes ajax e iframes para cargar y buscar datos. Fue construido utilizando formularios web C#, ASP.Net y jQuery (utilizado principalmente para las solicitudes AJAX) y actúa como un cliente para una solución de inicio de sesión único basada en IdentityServer4.

El proceso de autorización/autenticación del cliente de formularios web ASP.Net a IdentityServer funciona bien. Sin embargo, el problema que tengo es que cuando soy redirigido de IdentityServer4 a formularios web ASP.Net y realizo una búsqueda dentro del sitio de formularios web ASP.Net que implica realizar una solicitud jQuery AJAX, recibo el siguiente error cuando veo la pestaña de la consola en el navegador web a continuación.

Acceso a XMLHttpRequest en ' https://localhost:44307/connect/authorize ? ' (redireccionado desde ' https://localhost:44304/ajax/WebRequest.aspx/GetQuoteSearchDetails ') desde el origen ' https://localhost:44304 ' ha sido bloqueado por la política CORS: la respuesta a la solicitud de verificación previa no pasa el control de acceso comprobar: No hay encabezado 'Access-Control-Allow-Origin' en el recurso solicitado

He proporcionado una instantánea del error descrito anteriormente aquí para su revisión, referencia y aclaración.

A continuación se muestra la configuración del cliente ASP.Net Webforms hasta el momento.

 public void Configuration(IAppBuilder app) { JwtSecurityTokenHandler.DefaultInboundClaimTypeMap = new Dictionary<string, string>(); IdentityModelEventSource.ShowPII = true; // For more information on how to configure your application, visit // Fix for Bad Request 400 stemming from too many nonce cookies added to the header which // caused the site to crash. It appears that the authentication cookies were disappearing in the authentication // process. Hence the following line of code preserves such cookies from being lost. app.UseKentorOwinCookieSaver(); app.UseCookieAuthentication(new CookieAuthenticationOptions() { AuthenticationType = "Cookies", LoginPath = new PathString("/Master/Login") }); JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); //in Identity3 example https://github.com/IdentityServer/IdentityServer3.Samples/blob/master/source/Clients/WebFormsClient/Startup.cs app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions { AuthenticationType = "oidc", Authority = "https://localhost:44307", ClientId = "WebformsClient", ResponseType = "code id_token", //OpenIdConnectResponseType.CodeIdTokenToken, ClientSecret = "secret", Scope = "openid profile", RedirectUri = "https://localhost:44304/signin-oidc", //"https://localhost:44319/signin-oidc", PostLogoutRedirectUri = "https://localhost:44304/signout-callback-oidc", //"https://localhost:44319/signout-callback-oidc", Notifications = new OpenIdConnectAuthenticationNotifications { AuthenticationFailed = context => { context.HandleResponse(); context.Response.Redirect("/Error?message=" + context.Exception.Message); return Task.FromResult(0); } }, UseTokenLifetime = false, RequireHttpsMetadata = false, TokenValidationParameters = new TokenValidationParameters { NameClaimType = JwtRegisteredClaimNames.GivenName, RoleClaimType = ClaimTypes.Role }, //ProtocolValidator = new OpenIdConnectProtocolValidator //{ // RequireNonce = false //}, SignInAsAuthenticationType = "Cookies", }); app.UseKentorOwinCookieSaver(); app.UseStageMarker(PipelineStage.Authenticate); //in Identity3 example }

A continuación se muestra la configuración de IdentityServer4 para el cliente de formularios web mencionado anteriormente.

 new Client { ClientId = "WebformsClient", ClientName = "Asp.Net Webforms Client", AllowedGrantTypes = GrantTypes.Hybrid, RequireConsent = false, AllowAccessTokensViaBrowser = true, AlwaysSendClientClaims = true, AlwaysIncludeUserClaimsInIdToken = true, // where to redirect to after login RedirectUris = new List<string>() { "https://localhost:44304/signin-oidc" }, //// where to redirect to after logout PostLogoutRedirectUris = new List<string>() { "https://localhost:44304/signout-callback-oidc" }, AllowedScopes = new List<string> { IdentityServerConstants.StandardScopes.OpenId, IdentityServerConstants.StandardScopes.Profile }, ClientSecrets = { new Secret("secret".ToSha256()) }, AllowedCorsOrigins = new List<string> {"192.168.6.112"} }

Después de haber investigado algunos hechos sobre el problema mencionado anteriormente que está relacionado con CORS, probé las siguientes sugerencias a continuación, pero hasta ahora no me gustó.

Agregar encabezados personalizados dentro de la configuración web de WebformsClient (truncado por razones de brevedad)

 <system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Methods" value="GET,POST,OPTIONS" /> <add name="Access-Control-Allow-Headers" value="Content-Type, soapaction"/> </customHeaders> </httpProtocol> </system.webServer>

Configuración de encabezados personalizados en el controlador WebformsClient Application_BeginRequeset

 protected void Application_BeginRequest(Object sender, EventArgs e) { HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); //// Preflight request comes with HttpMethod OPTIONS if (HttpContext.Current.Request.HttpMethod == "OPTIONS") { HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache"); HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST"); // The following line solves the error message HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); // If any http headers are shown in preflight error in browser console add them below HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, Pragma, Cache-Control, Authorization "); HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); HttpContext.Current.Response.End(); } }

Una de las solicitudes de AJAX que maneja las solicitudes y devuelve los datos (también agrega encabezados personalizados para permitir CORS)

 ajax: { beforeSend: function (xhr) { xhr.setRequestHeader('Access-Control-Allow-Origin','*'); xhr.setRequestHeader('Access-Control-Allow-Methods', 'GET,POST,OPTIONS'); xhr.setRequestHeader('Access-Control-Allow-Headers', 'Content-Type, soapaction'); }, method: "POST", url: "dummyURL", contentType: "application/json;charset=utf-8", dataType: "json", //crossDomain: true, xhrFields: { withCredentials: true }, //headers : { // "accept": "application/json", // "Access-Control-Allow-Origin":"*" //}, data: function (d) { var SearchDetails = new Object(); var aoData = []; // Removed some code for security reasons. return JSON.stringify({ SearchDetails: aoData }); }, datasrc: "" }

Con la información que proporcioné anteriormente, espero que alguien pueda arrojar algo de luz con respecto a lo que se debe hacer y si hay algo que he omitido.

Cualquier entrada útil y sugerencias serían muy apreciadas.

ACTUALIZAR:

Me las arreglé para resolver el problema original con respecto a 'Access-Control-Allow-Origin' pero ahora me enfrenté a otro problema.

Al agregar los siguientes encabezados de respuesta en el archivo web.config del servidor (IdentityServer4) bajo la etiqueta "System.Webserver" como se muestra a continuación, se eliminará el problema anterior, pero ahora genera otro problema relacionado con el código de estado http 405 MÉTODO INCORRECTO, OPCIONES no permitidas" (consulte la instantánea a continuación).

 <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="https://localhost:44304" /> <add name="Access-Control-Allow-Methods" value="GET,POST,OPTIONS" /> <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, soapaction" /> <add name="Access-Control-Allow-Credentials" value="true" /> <add name="Accept" value="application/json" /> </customHeaders> </httpProtocol>

Http código de estado 405 "MAL MÉTODO: OPCIONES" instantánea.

Instantánea de error del código de estado 405 de Http

over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda