2017-02-11 10 views
0

私は自分のアプリケーションでLinkedinを使用して外部ログインを作成していますが、これまで対応するLinkedinアカウントでユーザーを認証できました。目的のために、Startup.Auth.csにNuGetパッケージKatanaContrib.Security.LinkedInと次のコードを使用しました。ASP.NET Web APIを使用してLinkedinから追加のプロファイルフィールドをリクエストする

app.UseLinkedInAuthentication(
    apiKey: ConfigurationManager.AppSettings["LinkedInAPIKey"].ToString(), 
    secretKey: ConfigurationManager.AppSettings["LinkedInAPISecret"].ToString()); 

私は正常にユーザーを認証し、外部登録することに成功しました。しかし、私は自分のデータベースに保存するためにLinkedInから提供されたすべてのユーザー情報を取得したいと思います。私の意見では、これを行う最も良い場所はAccountControllerRegisterExternalメソッドにあり、新しいユーザーが作成され、データベースに追加されます。しかし、そのメソッドをデバッグすると、利用可能な情報がすべてLinkedInから返されるわけではありません。

var info = await Authentication.GetExternalLoginInfoAsync(); 
var claims = info.ExternalIdentity.Claims; 

はわずか5クレームが返されると私はLinkedIn documentation pageを読んだとき、私はそれらの基本的なプロファイルデータにcorrespoding 5件のクレームが正確であることを見ましたがあります。どうやらLinkedinの統合に使用している外部ライブラリは、基本プロファイルデータのみを要求しています。詳細情報を取得したい場合は、別のURLにリクエストする必要があります。しかし、数時間の検索の後、私は必要なデータフィールドを検索するために、そのURLを上書きする方法を見つけることができません。どのように私はこの問題に近づくことができますか考えていますか?

答えて

0

私は長い間苦労して問題を解決することができました。しかし、KatanaContrib.Security.LinkedInの代わりにライブラリOwin.Security.Providers.LinkedInを使用しました。ソースコードを見つけたので、そこから何をすべきか理解しました。

 var linkedinOptions = new LinkedInAuthenticationOptions() 
     { 
      ClientId = ConfigurationManager.AppSettings["LinkedInAPIKey"].ToString(), 
      ClientSecret = ConfigurationManager.AppSettings["LinkedInAPISecret"].ToString(), 
      Provider = new LinkedInAuthenticationProvider() 
      { 
       OnAuthenticated = (context) => 
       { 
        foreach (var x in context.User) 
        { 
         var claimType = string.Format("urn:linkedin:{0}", x.Key); 
         string claimValue = x.Value.ToString(); 
         if (!context.Identity.HasClaim(claim => claim.Value == claimValue)) 
          context.Identity.AddClaim(new Claim(claimType, claimValue)); 
        } 

        return Task.FromResult(0); 
       } 
      } 
     }; 

     List<string> profileFieldsToGet = new List<string>() { "location" }; 

     foreach (var field in profileFieldsToGet) 
     { 
      linkedinOptions.ProfileFields.Add(field); 
     } 


     app.UseLinkedInAuthentication(linkedinOptions); 

さて、profileFieldsToGetにあなたが取得したいプロファイルフィールドを指定することができます。これは、ソリューションです。すべての基本プロファイルフィールドはhereです。

関連する問題