【问题标题】:WebApi Get access Token from HttpContextWebApi 从 HttpContext 获取访问令牌
【发布时间】:2019-04-27 02:26:21
【问题描述】:

我正在尝试从我使用 .Net-Core 2.1 的 Api 中的 HttpContext 获取登录用户访问令牌:

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

编辑

我正在使用签名管理器来显示 Auth Providers:

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");
    });

当我尝试获取访问令牌时,我收到 null。但是我可以看到我是从 HttpContext.User 登录的。

如何从 HttpContext 获取我的访问令牌?

【问题讨论】:

标签: c# .net authentication oauth-2.0 .net-core


【解决方案1】:

由于某种原因,当我使用登录管理器登录时,它没有在 HttpContext 上设置令牌。所以相反,我得到了这样的访问令牌:

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

    return true;
}

【讨论】:

    【解决方案2】:

    你可以试试这段代码吗?

    HttpContext.Request.Headers["authorization"]
    

    【讨论】:

    • 我不认为那是访问令牌,我认为它隐藏在 cookie 中的某个地方,但谢谢,我会在那里戳一下
    猜你喜欢
    • 2018-09-20
    • 1970-01-01
    • 2018-03-01
    • 2019-12-11
    • 2016-07-18
    • 2018-06-06
    • 2017-03-22
    • 2014-07-09
    相关资源
    最近更新 更多