Ich habe eine Backend -ASP.NET -Kern -Web -API, die auf einem Azure -kostenlosen Plan gehostet wird (fügen Sie Standard -Sicherheits -Header hinzu. NET CORE). Die Client -Anwendung wird nicht auf Azure gehostet, sondern auf Github -Seiten oder auf einem anderen Webhosting -Dienst gehostet, auf den ich Zugriff habe. Aus diesem Grund werden die Domainnamen nicht ausgerichtet. Es weigert sich zu arbeiten. Ich rufe die APIs durch Ajax in JQuery an. Die React -Site funktioniert, so dass ich weiß, dass es nicht das ist. Der JQuery -API -Anruf funktioniert, wie ich bei Versuch bestätigt habe. So tätige ich die Anrufe < /p>
Code: Select all
var apiUrl = "http://andrewgodfroyportfolioapi.azurewebsites.net/api/Authentication";
//alert(username + "|" + password + "|" + apiUrl);
$.ajax({
url: apiUrl,
type: "POST",
data: {
username: username,
password: password
},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
var authenticatedUser = JSON.parse(response);
//alert("Data Loaded: " + authenticatedUser);
if (onComplete != null) {
onComplete(authenticatedUser);
}
},
error: function (xhr, status, error) {
//alert(xhr.responseText);
if (onComplete != null) {
onComplete(xhr.responseText);
}
}
});
< /code>
[b] Was habe ich versucht < /strong> < /p>
< Strong> Versuch 1 - Die richtige Art [/b]
https://learn.microsoft.com/en-us/aspnet/core/security/cors
Ich habe dieses Tutorial auf der Microsoft -Website zu einem T befolgt, um alle drei Optionen für die globale Aktivierung im Start -up.cs zu aktivieren, jeden Controller aufzubauen und jede Aktion auszuprobieren. < /p >
Befolgt dieser Methode funktioniert die Querdomäne, jedoch nur für eine einzelne Aktion auf einem einzelnen Controller (post in den AccountController). Für alles andere weigert sich die Microsoft.aspnetcore.cors
Hier ist, wie ich es in startup.cs
eingerichtet habe
Code: Select all
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add Cors
services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
// Add framework services.
services.AddMvc();
services.Configure(options =>
{
options.Filters.Add(new CorsAuthorizationFilterFactory("MyPolicy"));
});
...
...
...
}
// This method gets called by the runtime. Use this method to configure
//the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
// Enable Cors
app.UseCors("MyPolicy");
//app.UseMvcWithDefaultRoute();
app.UseMvc();
...
...
...
}
< /code>
Wie Sie sehen können, mache ich alles wie erzählt. Ich füge beide Male vor MVC hinzu, und als das nicht funktioniert habe, habe ich versucht, [EnableCors ("MyPolicy")]
zu setzen
Code: Select all
[Route("api/[controller]")]
[EnableCors("MyPolicy")]
public class AdminController : Controller
https://andrewlock.net /Addition-Default-Security-Header-in-ASP-Net-Core/
Nach mehreren Stunden des Versuchs des vorherigen Versuch Die Headers manuell und zwingen sie, jede Antwort zu laufen. Ich habe dies nach diesem Tutorial gemacht, wie man jede Antwort manuell Header hinzufügt.
Code: Select all
.AddCustomHeader("Access-Control-Allow-Origin", "*")
.AddCustomHeader("Access-Control-Allow-Methods", "*")
.AddCustomHeader("Access-Control-Allow-Headers", "*")
.AddCustomHeader("Access-Control-Max-Age", "86400")
< /code>
Dies sind andere Header, die ich ausprobiert habe, was fehlgeschlagen ist < /p>
.AddCustomHeader("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE")
.AddCustomHeader("Access-Control-Allow-Headers", "content-type, accept, X-PINGOTHER")
.AddCustomHeader("Access-Control-Allow-Headers", "X-PINGOTHER, Host, User-Agent, Accept, Accept: application/json, application/json, Accept-Language, Accept-Encoding, Access-Control-Request-Method, Access-Control-Request-Headers, Origin, Connection, Content-Type, Content-Type: application/json, Authorization, Connection, Origin, Referer")
< /code>
Mit dieser Methode werden die Cross -Site -Header ordnungsgemäß angewendet und sie werden in meiner Entwicklerkonsole und in Postboten angezeigt. Das Problem ist jedoch, dass der Webbrowser zwar die Access-Control-Owl-Owl-Origin
Die Brute -Kraft -Methode funktioniert also auch nicht < /p>
Schließlich < /strong> < /p>
Hat jemand dies zum Laufen gebracht und könnte eine Hand leihen oder mich einfach in die richtige Richtung weisen? < /p>
Bearbeiten < /strong> < /p>
Um die API -Aufrufe zum Durchführen zu erhalten, musste ich aufhören, JQuery zu verwenden und zu einem reinen JavaScript -XMLHTTPREquest < /Code> Format. Um die Antwort von MindingData zu befolgen, außer innerhalb der Methode konfigurieren die app.usecors vor app.usemvc . Mit den JavaScript -API -Lösungsoptionen. > Ich habe es geschafft, Versuch 2 (brutal zwingen) zum Arbeiten zu bekommen ... mit der einzigen Ausnahme, dass die Wildcard für den Zugangskontroll-Allow-Origin nicht funktioniert, und als solches habe ich Um die Domänen manuell zu setzen, die Zugriff darauf haben. Das heißt, es ist ein Start < /p>
Code: Select all
app.UseSecurityHeadersMiddleware(new SecurityHeadersBuilder()
.AddDefaultSecurePolicy()
.AddCustomHeader("Access-Control-Allow-Origin", "http://localhost:3000")
.AddCustomHeader("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, PATCH, DELETE")
.AddCustomHeader("Access-Control-Allow-Headers", "X-PINGOTHER, Content-Type, Authorization"));