Prieigos kontrolės ir leidimo kilmė su keliais domenais

Mano žiniatinklio konfigūracijoje norėčiau nurodyti daugiau nei vieną prieigos kontrolės ir leidimo kilmės direktyvos sritį. Nenoriu naudoti *. Bandžiau šią sintaksę:

 <add name="Access-Control-Allow-Origin" value="http://localhost:1506, http://localhost:1502" /> 

tai vienas

 <add name="Access-Control-Allow-Origin" value="http://localhost:1506 http://localhost:1502" /> 

tai vienas

 <add name="Access-Control-Allow-Origin" value="http://localhost:1506; http://localhost:1502" /> 

ir tai

 <add name="Access-Control-Allow-Origin" value="http://localhost:1506" /> <add name="Access-Control-Allow-Origin" value="http://localhost:1502" /> 

bet nė vienas iš jų neveikia. Kas yra tinkama sintaksė?

59
26 июня '13 в 17:46 2013-06-26 17:46 Sam yra nustatytas birželio 26 d. 13 val. 5:46 2013-06-26 17:46
@ 8 atsakymai

Gali būti tik viena „ Access-Control-Allow-Origin atsakymo antraštė, ir ši antraštė gali turėti tik vieną pradinę vertę. Todėl norint, kad jis veiktų, turite turėti kodą, kuris:

  • Užfiksuokite „ Origin užklausos antraštę.
  • Patikrina, ar pradinė vertė yra viena iš baltojo sąrašo reikšmių.
  • Jei jis yra teisingas, nustatykite šią reikšmę „ Access-Control-Allow-Origin antraštei.

Nemanau, kad yra būdas tai padaryti tik per web.config.

 if (ValidateRequest()) { Response.Headers.Remove("Access-Control-Allow-Origin"); Response.AddHeader("Access-Control-Allow-Origin", Request.UrlReferrer.GetLeftPart(UriPartial.Authority)); Response.Headers.Remove("Access-Control-Allow-Credentials"); Response.AddHeader("Access-Control-Allow-Credentials", "true"); Response.Headers.Remove("Access-Control-Allow-Methods"); Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); } 
57
26 июня '13 в 23:10 2013-06-26 23:10 atsakymą monsuras pateikė birželio 26 d. 13 val. 11:10 2013-06-26 23:10

Jei naudojate IIS 7.5+ ir Rewrite 2.0, galite naudoti:

 <system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" /> <add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS,PUT,DELETE" /> </customHeaders> </httpProtocol> <rewrite> <outboundRules> <clear /> <rule name="AddCrossDomainHeader"> <match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="true"> <add input="{HTTP_ORIGIN}" pattern="(http(s)?://((.+\.)?domain1\.com|(.+\.)?domain2\.com|(.+\.)?domain3\.com))" /> </conditions> <action type="Rewrite" value="{C:0}" /> </rule> </outboundRules> </rewrite> </system.webServer> 

RESPONSE_Access_Control_Allow_Origin serverio kintamojo paaiškinimas:
„Perrašyti“ galite naudoti bet kurią eilutę po RESPONSE_ , ir ji sukurs atsakymo antraštę, naudodama likusį žodį kaip antraštės pavadinimą (šiuo atveju, „Access-Control-Allow-Origin“). Perrašyti naudojimus pabrėžia „_“ vietoj brūkšnių „-“ (perrašykite juos brūkšneliais)

HTTP_ORIGIN serverio HTTP_ORIGIN paaiškinimas:
Panašiai perrašant galite užfiksuoti bet kurią užklausos antraštę, naudodami HTTP_ kaip priešdėlį. Tos pačios taisyklės su brūkšneliais (vietoj brūkšnio „-“ naudokite pabraukimą „_“).

40
27 июня '15 в 5:04 2015-06-27 05:04 Atsakymą pateikė Paco Zarate birželio 15 d. 15 val. 2015-06-27 05:04

„Web.API“ šis atributas gali būti pridėtas naudojant „ Microsoft.AspNet.WebApi.Cors , kaip aprašyta http://www.asp.net/web-api/overview/security/enabled-cross-origin-requests-in-webweb -api p>

MVC galite sukurti filtro atributą, kad atliktumėte šį darbą:

 [EnableCors] public class SecurityController : Controller { // *snip* [EnableCors] public ActionResult SignIn(Guid key, string email, string password) { 

Arba pridėkite jį prie visų „Global.asax.cs“ valdiklių

13
16 янв. Robo bažnyčios atsakymą pateikė sausio 16 d. 2015-01-16 16:14 '15 at 16:14 2015-01-16 16:14

Man pavyko išspręsti šią užklausos apdorojimo kodą, vadovaujantis „monsur“ patarimu.

2
17 авг. Atsakymas pateikiamas bsandhu 17 rug . 2013-08-17 19:00 '13 19:00 val. 2013-08-17 19:00

Perskaitęs kiekvieną atsakymą ir išbandęs juos, nė vienas iš jų man nepadėjo. Ką aš rado ieškodamas kitur, yra tai, kad galite sukurti pasirinktinį atributą, kurį galite pridėti prie valdiklio. Jis perrašo „EnableCors“ ir prideda baltus sąrašus.

Šis sprendimas veikia gerai, nes jis leidžia jums turėti baltus sąrašus žiniatinklio konfigūracijoje („appsettings“), o ne koduoti juos valdiklio „EnableCors“ atribute.

  [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)] public class EnableCorsByAppSettingAttribute : Attribute, ICorsPolicyProvider { const string defaultKey = "whiteListDomainCors"; private readonly string rawOrigins; private CorsPolicy corsPolicy; /// <summary> /// By default uses "cors:AllowedOrigins" AppSetting key /// </summary> public EnableCorsByAppSettingAttribute() : this(defaultKey) // Use default AppSetting key { } /// <summary> /// Enables Cross Origin /// </summary> /// <param name="appSettingKey">AppSetting key that defines valid origins</param> public EnableCorsByAppSettingAttribute(string appSettingKey) { // Collect comma separated origins this.rawOrigins = AppSettings.whiteListDomainCors; this.BuildCorsPolicy(); } /// <summary> /// Build Cors policy /// </summary> private void BuildCorsPolicy() { bool allowAnyHeader = String.IsNullOrEmpty(this.Headers) || this.Headers == "*"; bool allowAnyMethod = String.IsNullOrEmpty(this.Methods) || this.Methods == "*"; this.corsPolicy = new CorsPolicy { AllowAnyHeader = allowAnyHeader, AllowAnyMethod = allowAnyMethod, }; // Add origins from app setting value this.corsPolicy.Origins.AddCommaSeperatedValues(this.rawOrigins); this.corsPolicy.Headers.AddCommaSeperatedValues(this.Headers); this.corsPolicy.Methods.AddCommaSeperatedValues(this.Methods); } public string Headers { get; set; } public string Methods { get; set; } public Task<CorsPolicy> GetCorsPolicyAsync(HttpRequestMessage request, CancellationToken cancellationToken) { return Task.FromResult(this.corsPolicy); } } internal static class CollectionExtensions { public static void AddCommaSeperatedValues(this ICollection<string> current, string raw) { if (current == null) { return; } var paths = new List<string>(AppSettings.whiteListDomainCors.Split(new char[] { ',' })); foreach (var value in paths) { current.Add(value); } } } 

Radau šį vadovą internete ir jis veikė kaip žavesys:

http://jnye.co/Posts/2032/dynamic-cors-origins-from-appsettings-using-web-api-2-2-cross-origin-support

Maniau, kad aš jį mestu visiems, kuriems jos reikia.

2
04 нояб. atsakymą pateikė Helpha 04 Nov. 2016-11-04 22:53 '16 at 10:53 pm 2016-11-04 22:53

Pažvelkite į „IdentityType IdentityModel“ biblioteką - ji visiškai palaiko CORS:

http://brockallen.com/2012/06/28/cors-support-in-webapi-mvc-and-iis-with-thinktecture-identitymodel/

Ir tai gali dinamiškai skleisti norimą ACA kilmę.

2
27 июня '13 в 6:44 2013-06-27 06:44 atsakymą pateikė Brockas Allenas birželio 13 d. 13 val. 6:44 2013-06-27 06:44

Jūs galite naudoti vidutinę skolos programą, kad nustatytumėte „Cors“ politiką, kurioje galite nustatyti kelias Corso linijas.

 return new CorsOptions { PolicyProvider = new CorsPolicyProvider { PolicyResolver = context => { var policy = new CorsPolicy() { AllowAnyOrigin = false, AllowAnyMethod = true, AllowAnyHeader = true, SupportsCredentials = true }; policy.Origins.Add("http://foo.com"); policy.Origins.Add("http://bar.com"); return Task.FromResult(policy); } } }; 
0
09 авг. chayan banerjee atsakymas 09 rug . 2017-08-09 12:17 '17, 12:17 pm 2017-08-09 12:17

Jums reikia tik: - pridėti „Global.asax“ į savo projektą,
- pašalinkite iš savo žiniatinklio.
- pridėjus „Global.asax“ metodą į „Application_BeginRequest“:

 HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin","*"); if (HttpContext.Current.Request.HttpMethod == "OPTIONS") { HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,PUT,DELETE"); HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, Accept"); HttpContext.Current.Response.End(); } 

Tikiuosi, kad ši pagalba. kad mano darbas.

-2
24 июля '13 в 2:35 2013-07-24 02:35 atsakymas pateikiamas joanrm20 liepos 24 d., 13 d., 2:35 val. 2013-07-24 02:35

Kiti klausimai apie „ žymes arba „ Klauskite“