Авторизация токена OAuth (запрос отклонен)

У меня есть WebApi 2 и веб-проект MVC в одном решении, работающем на разных портах IIS. После получения моего токена Oauth с помощью jQuery AJAX я все еще получаю сообщение об ошибке 401 Unauthorized при попытке вызвать авторизованный метод контроллера.

введите здесь описание изображения

Запускать:

public void Configuration(IAppBuilder app)
{
    HttpConfiguration httpConfig = new HttpConfiguration();
    ConfigureOAuthTokenGeneration(app);
    ConfigureOAuthTokenConsumption(app);
    ConfigureWebApi(httpConfig);
    app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
    app.UseWebApi(httpConfig);
}

ПользовательскийOAuthProvider:

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
    var userManager = context.OwinContext.GetUserManager<UserManager>();
    User user = await userManager.FindAsync(context.UserName, context.Password);

    // checks with context.SetError() results.

    ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager, "JWT");
    oAuthIdentity.AddClaim(new Claim(ClaimTypes.Role, "User"));

    var ticket = new AuthenticationTicket(oAuthIdentity, null);
    context.Validated(ticket);
}

Думает, что я пробовал из Я получаю, что авторизация была отклонена для этого запроса. сообщение об ошибке при использовании промежуточного ПО OWIN oAuth (с отдельными серверами аутентификации и ресурсов):

  1. Обновление всех пакетов Owin до последней версии (веб-проект не использует какие-либо функции Owin, поэтому здесь он не установлен).
  2. API и веб - это разные проекты, но на одной машине, поэтому один и тот же ключ.
  3. Конфигурация токена OAuth предшествует конфигурации WebApi в Startup.cs.
  4. Делаются утверждения: oAuthIdentity состоит из роли и утверждения администратора (http://schemas.microsoft.com/ws/2008/06/identity/claims/role: Пользователь)

Все остальное работает как положено (веб-API, Cors, генерация токенов,...), что я делаю не так? (Здесь задействовано много кода, поэтому дайте мне знать, если мне нужно разместить другой фрагмент кода из моих проектов.

ИЗМЕНИТЬ:

Вызов Ajax (решение jumuro):

var token = sessionStorage.getItem(tokenKey); // Same as the generated login token
$.ajax({
    type: 'POST',
     // Don't forget the 'Bearer '!
    beforeSend: function (xhr) { xhr.setRequestHeader('Authorization', 'Bearer ' + token) },
    url: 'http://localhost:81/api/auth/test', // Authorized method
    contentType: 'application/json; charset=utf-8'
}).done(function (data) {
    //
});

person Sam    schedule 04.05.2016    source источник


Ответы (1)


Вы должны включить заголовок Authorization с токеном носителя в вызов ajax. См. этот ответ в качестве примера. Я надеюсь, что это помогает.

person jumuro    schedule 05.05.2016
comment
Я пытался, но безуспешно, можете ли вы подтвердить, что я делаю это правильно? (отредактировал мой вопрос). - person Sam; 05.05.2016
comment
Это сработало! Я забыл поставить «Носителя» перед жетоном. Большое спасибо! - person Sam; 05.05.2016