WebApi Получить токен доступа от HttpContext - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь получить токен доступа авторизованных пользователей из HttpContext в моем API. Я использую .Net-Core 2.1:

[HttpGet]
public async Task<bool> Test()
{
    var token = await HttpContext.GetTokenAsync("access_token");
    return true;
}

Редактировать

Я использую менеджер подписи, чтобы показать провайдеров аутентификации:

SignInManager.GetExternalAuthenticationSchemesAsync()

И в обратном вызове внешнего входа я сохраняю Мои токены с менеджером входа следующим образом:

var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor: true);
if (result.Succeeded)
{
    await _signInManager.UpdateExternalAuthenticationTokensAsync(info);
    _logger.LogInformation("User logged in with {Name} provider.", info.LoginProvider);
    return RedirectToLocal(returnUrl);
}

Конфигурация аутентификации настроена так:

services.AddAuthentication(COOKIE_AUTH)
    .AddCookie(options => options.ExpireTimeSpan = TimeSpan.FromMinutes(60))
    .AddCoinbase(options => {
        options.SendLimitAmount = 1;
        options.SendLimitCurrency = "USD";
        options.SendLimitPeriod = SendLimitPeriod.day;
        options.ClientId = Configuration["Coinbase:ClientId"];
        options.ClientSecret = Configuration["Coinbase:ClientSecret"];
        COINBASE_SCOPES.ForEach(scope => options.Scope.Add(scope));
        options.SaveTokens = true;
        options.ClaimActions.MapJsonKey("urn:coinbase:avatar", "avatar_url");
    });

Когда даже я пытаюсь получить токен доступа, я получаю ноль.Однако я вижу, что я вошел в систему с HttpContext.User.

Как получить токен доступа с HttpContext?

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

По какой-то причине, когда я использую менеджер входа в систему, он не устанавливает токены в HttpContext.Поэтому вместо этого я получаю токен доступа вот так:

[HttpGet]
public async Task<bool> Test()
{
    var userFromManager = await _userManager.GetUserAsync(User);
    var externalAccessToken = await _userManager.GetAuthenticationTokenAsync(
                                   userFromManager, "Coinbase", "access_token");

    return true;
}
0 голосов
/ 25 ноября 2018

Можете ли вы попробовать с этим кодом.

HttpContext.Request.Headers["authorization"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...