Ich habe eine Web-API erstellt, die das JWT-System mit diesem Artikel here verwendet. Wenn die API von einem REST-Client aufgerufen wird, funktioniert das problemlos. Wenn Sie jedoch versuchen, über einen Browser darauf zuzugreifen, wird ein CORS-Fehler ausgegeben, da die richtigen Antwortheader nicht gesendet werden.Antwort-Header nicht auf OwinContext setzen
Startup.cs
app.UseCors(CorsOptions.AllowAll);
Beachten Sie, dass auf meinem Controller CORS funktioniert gut, es bricht nur für die OAuthAuthorizationServer.
CustomOAuthProvider.cs
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
var user = Database.Users.FirstOrDefault(u => u.Email == context.UserName);
if (user == null || !BCrypt.Net.BCrypt.Verify(context.Password, user.Password))
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return Task.FromResult<object>(null);
}
var companyId = int.Parse(context.OwinContext.Get<string>("company_id"));
var company = user.Companies.FirstOrDefault(c => c.Id == companyId);
if (company == null)
{
context.SetError("invalid_grant", "You don't belong to that company!");
return Task.FromResult<object>(null);
}
var identity = new ClaimsIdentity("JWT");
identity.AddClaim(new Claim("uue", user.Email));
var props = new AuthenticationProperties(new Dictionary<string, string>
{
{ "audience", company.ServerUrl }
});
var ticket = new AuthenticationTicket(identity, props);
context.Validated(ticket);
return Task.FromResult<object>(null);
}
jedoch den Anruf, nachdem Sie das Token zu erhalten, bekomme ich nur diese Antwort-Header zurück.
Content-Length:1245
Content-Type:text/html
Date:Wed, 20 Apr 2016 20:34:40 GMT
Server:Microsoft-IIS/8.5
X-Powered-By:ASP.NET
Gibt es etwas, was ich falsch mache?
Funktioniert auch nicht, wie ich schon sagte der Header ich mit den OwinContext.Response.headers hinzufügen nicht hinzukommen. Die anderen Controller auf meinem Autorisierungsserver funktionieren problemlos mit CORS. –
Nur um sicher zu sein, versuchen Sie, jeden Aufruf von 'context.OwinContext.Response.Headers.Add ("Access-Control-Allow-Origin", neu [] {"*"}); 'aus Ihrem Code zu entfernen und nur zu verlassen "App.UseCors". –
Nein, immer noch den Fehler bekommen. –