2016-12-25 9 views
2

私はMVCアプリケーションへのログインにFacebook & Googleを使用しています。 Facebookはログインしていて、ユーザーの働きかけに関するデータを取得しています。 Googleのログインも機能していて、私はAccessTokenを受け取った場所の "ExternalLoginCallback"メソッドに当てはまります。ASP.NET MVC Identity GetExternalLoginInfoから与えられたAccessToken経由でGoogleにアクセスするユーザープロフィール

BUT - 「FacebookClient」という単純なナゲットパッケージは見つかりませんでした。ここではAccessTokenを渡すだけで、DBに保存したいユーザーの詳細を取得できます。

私はGoogleのような他のナゲットを見つけました:Google.Apis.Plus.v1ここで私はclientIdをもう一度渡す必要があります、secreatIdはX509Certificate2の資格情報を秘密にしていますので、 "FacebookClient"を提供する簡単な方法があれば教えてください。あなたがログインしているユーザーに関する情報をどのように取得するのか説明してください。ありがとうございました。

[AllowAnonymous] 
public ActionResult Login(string provider) 
{ 
    HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties 
    { 
     RedirectUri = Url.Action("ExternalLoginCallback") 
    }, provider); 

    return new HttpUnauthorizedResult(); 
} 

[AllowAnonymous] 
public ActionResult ExternalLoginCallback() 
{    
    var externalLoginInfo = HttpContext.GetOwinContext().Authentication.GetExternalLoginInfo(); 
    var accessToken = externalLoginInfo.ExternalIdentity.Claims.FirstOrDefault(x => x.Type == "FacebookAccessToken")?.Value; 

    // HERE I WOULD LIKE TO HAVE FUNCTIONALITY SIMILAR TO FacebookClient 
    var client = new FacebookClient(accessToken); 
    dynamic facebookData = client.Get("me", new { fields = "email,name,first_name,last_name,gender,locale" }); 
} 

答えて

0

は最後に、私はそれを行うにはどのような方法を見つけました:

var userInfoUrl = "https://www.googleapis.com/oauth2/v2/userinfo?alt=json"; 
var hc = new HttpClient(); 
hc.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 
var response = hc.GetAsync(userInfoUrl).Result; 
var userInfo = response.Content.ReadAsStringAsync().Result;    
dynamic data = JObject.Parse(userInfo); 
関連する問題