2017-05-29 11 views
0

"Authorization Code Grant Flow"を使用してWeb APIを呼び出すASP .Net Core 1.1 MVC Webアプリケーションを開発しています。 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>' 

任意のアイデアを与えて、コンパイルされませんか?

答えて

1

最初の行は、おそらく次のようになります。

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

今あなたが動作しませんFirstOrDefaultへの引数として"access_token"を与えるためにしようとしています。述部を指定する必要があります。

+0

ありがとうjuunasを!それはトリックでした!残念ながら、返される "accessToken"はnullですが、それは私が理解しようとするものです - 少なくともコンパイルしてください! :) – user1900799

0

あなたは拡張機能を作成し、アクセストークンを取得するために、よりエレガントな方法を使用することができます。

var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token"); 
関連する問題