Я создал веб-api, который использует JWT-систему, используя эту статью here. При вызове API от клиента REST он работает нормально. Однако при попытке получить к нему доступ из браузера он дает ошибку CORS, поскольку он не отправляет правильные заголовки ответов.Ответы заголовков не установлены на OwinContext
Startup.cs
app.UseCors(CorsOptions.AllowAll);
Обратите внимание, что на моих контроллерах CORS работает просто отлично, это просто разрывает на 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);
}
Однако после принятия вызова, чтобы получить маркер, я только получить обратно эти заголовки ответа.
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
Есть ли что-то, что я делаю неправильно?
Не работает либо, как я сказал, заголовок я добавляю с OwinContext.Response.headers не добавляется. Другие контроллеры на моем сервере авторизации отлично работают с CORS. –
Чтобы убедиться, попробуйте удалить каждый вызов 'context.OwinContext.Response.Headers.Add (« Access-Control-Allow-Origin », new [] {" * "});' из вашего кода и оставить только 'app.UseCors'. –
Невозможно получить ошибку. –