3

У меня есть приложение api 2 для веб-приложений, которое я вызываю для использования клиента angularjs. Приложение web api способно выдавать токены доступа и обновлять токены для аутентификации.CORS работает для токена доступа, но не для обновления токена в Web Api 2

Имея следующие строки в «GrantResourceOwnersCredentials» метод, то CORS работает отлично для разрешения выдавать маркеры доступа:

var allowedOrigin = context.OwinContext.Get<string>("as:clientAllowedOrigin"); 
    if (allowedOrigin == null) allowedOrigin = "*"; 
    context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin }); 

Однако, когда я пытаюсь выдать токены обновления через angularjs приложения, я получаю это хорошая старая ошибка в консоли:

OPTIONS http://localhost:65141/token 
(index):1 XMLHttpRequest cannot load http://localhost:65141/token. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:56815' is therefore not allowed access. The response had HTTP status code 400. 

мне было интересно, как маркеры доступа выдается в порядке, и токены обновления также выпускаются с использованием той же конечной точки, что я должен сделать, чтобы преодолеть эту проблему?

Кстати, угловой код в порядке. Я отключил безопасность веб-браузера Google Chrome, а потом все сработало! Любая помощь очень ценится!

ответ

3

После того, как вы искали весь свободный интернет, вот что я нашел, что решает проблему. Добавление этого кода в AuthorizationProvider решит проблему:

public override Task MatchEndpoint(OAuthMatchEndpointContext context) 
     { 
      if (context.IsTokenEndpoint && context.Request.Method == "OPTIONS") 
      { 
       context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }); 
       context.OwinContext.Response.Headers.Add("Access-Control-Allow-Headers", new[] { "authorization" }); 
       context.RequestCompleted(); 
       return Task.FromResult(0); 
      } 

      return base.MatchEndpoint(context); 
     } 
+0

У меня такая же проблема, но в моем случае я даже не могу получить действительный токен. Несмотря на то что я включил Cors в методе Register() 'WebApiConfig.cs', Chrome продолжает бросать исключение. Поле заголовка запроса Content-Type недопустимо с помощью Access-Control-Allow-Headers в предполетном ответе.'. Однако, если я получаю токен с помощью Fidder, я могу отправить этот токен с запросом браузера на '\ api \ values' - и он работает! –

Смежные вопросы