正在检索控制器中的访问令牌

问题描述 投票:2回答:2

我正在开发ASP .Net Core 1.1 MVC Web应用程序,该应用程序使用“授权代码授予流程”调用Web API。我正在使用Auth0作为身份验证服务器。

按照Auth0教程,在用户成功登录到Web应用程序之后,现在做了一些使Web应用程序调用Web api的操作,它说我应该按以下方式获取访问令牌:

public async Task<IActionResult> Index()
{
    string accessToken = User.Claims.FirstOrDefault("access_token")?.Value;

    if (accessToken == "")
        return View("Error");

    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

    HttpResponseMessage responseMessage = await client.GetAsync(inspectionsUrl);
    if (responseMessage.IsSuccessStatusCode)
    {
        var responseData = responseMessage.Content.ReadAsStringAsync().Result;
        List<Inspection> inspections = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Inspection>>(responseData);
        return View(inspections);
    }
    return View("Error");
}

但是,它甚至没有编译,给出以下内容

Argument 2: cannot convert from 'string' to 'System.Func <System.Security.Claims.Claim, bool>'

有什么想法吗?

authorization asp.net-core-mvc access-token auth0
2个回答
3
投票

第一行应该是:

string accessToken = User.Claims.FirstOrDefault(c => c.Type == "access_token")?.Value;

目前,您正在尝试将"access_token"用作FirstOrDefault的参数,这将不起作用。您必须指定一个谓词。


1
投票

您可以编写扩展名并使用更优雅的方式来获取访问令牌:

var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token");

0
投票

如果您需要在WebAPI Controller函数中解码令牌,我发现此方法有效:

String token = Request.Headers.Authorization.Parameter;
Microsoft.Owin.Security.AuthenticationTicket t = Startup.OAuthOptions.AccessTokenFormat.Unprotect(token);
© www.soinside.com 2019 - 2024. All rights reserved.