在控制器中检索访问令牌
Retrieving access token in controller
我正在开发一个 ASP .Net Core 1.1 MVC 网络应用程序,它使用 "Authorization Code Grant Flow" 调用网络 API。我正在使用 Auth0 作为身份验证服务器。
按照 Auth0 教程,此时用户已成功登录网络应用程序,现在执行一些操作使网络应用程序调用网络 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>'
有什么想法吗?
第一行大概应该是:
string accessToken = User.Claims.FirstOrDefault(c => c.Type == "access_token")?.Value;
现在您正试图将 "access_token"
作为 FirstOrDefault
的参数,这是行不通的。您必须指定谓词。
您可以编写扩展并使用更优雅的方式来检索访问令牌:
var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token");
我正在开发一个 ASP .Net Core 1.1 MVC 网络应用程序,它使用 "Authorization Code Grant Flow" 调用网络 API。我正在使用 Auth0 作为身份验证服务器。
按照 Auth0 教程,此时用户已成功登录网络应用程序,现在执行一些操作使网络应用程序调用网络 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>'
有什么想法吗?
第一行大概应该是:
string accessToken = User.Claims.FirstOrDefault(c => c.Type == "access_token")?.Value;
现在您正试图将 "access_token"
作为 FirstOrDefault
的参数,这是行不通的。您必须指定谓词。
您可以编写扩展并使用更优雅的方式来检索访问令牌:
var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token");