2017-05-29 99 views
0

我正在开发一个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>' 

任何想法?

回答

1

第一行也许应该是:

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

现在你正在试图给"access_token"作为参数传递给FirstOrDefault,这是行不通的。你必须指定一个谓词。

+0

感谢juunas!这就是诀窍!不幸的是,返回的“accessToken”为null,但这对我来说是一个尝试 - 至少现在编译! :) – user1900799

0

你可以写扩展和检索访问令牌使用更优雅的方式:

var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token"); 
相关问题