2016-04-16 4 views
4

私はASP.NETコアRC1を使用しています(RC2でVSサポートがないため、RC2夜間ビルドにはまだアップグレードできません)。ASP.NET Core RC1のFacebookプロバイダを使用して追加のフィールドを取得するには?

私はFacebook(first_namelast_nameemailおよびsignificant_other)から追加フィールドを取得しようとしています。

私は、コードを使用するがGithubに提案:

app.UseFacebookAuthentication(options => 
{ 
    options.AppId = Configuration["Authentication:Facebook:AppId"]; 
    options.AppSecret = Configuration["Authentication:Facebook:AppSecret"]; 
    options.Scope.Add("email"); 
    options.Scope.Add("user_relationships"); 
    options.BackchannelHttpHandler = new HttpClientHandler(); 
    options.UserInformationEndpoint = 
     "https://graph.facebook.com/v2.5/me?fields=id,email,first_name,last_name,significant_other"; 

このソリューションでは、実際にユーザーのemailを返しますが、first_nameで失敗し、last_namesignificant_other(と私は名前、IDとメール以外試みた他のフィールド)。

また、FBアクセストークンを取得することはできますか? ASP.NET Coreにバグがある(少なくともRC1では)ため、将来的に他のエッジを照会するために必要になるかもしれません。

クリーンでなくても、方法が必要です。

答えて

6

Facebook(first_name、last_name、email、およびsignificant_other)から追加のフィールドを取得しようとしています。このソリューションは実際にユーザーの電子メールを返しますが、first_name、last_name、およびsignificant_other(および名前、ID、電子メール以外にも試した他のフィールド)で失敗します。 RC1では

、Facebookのミドルウェアは自動的にあなたがアプリケーションコードから取り出すことができるようにしたい場合は、手動でイベントモデルを使用してそれらを抽出する必要があるので、名または姓請求として電子メールを保存ではなく、 https://github.com/aspnet/Security/issues/688:最初の名前/最後の名前はデフォルトで含まれているよう

はRC2では、カスタムコードは、必要ではないでしょう。


また、FBのアクセストークンを取得可能ですか? ASP.NET Coreにバグがある(少なくともRC1では)ため、将来的に他のエッジを照会するために必要になるかもしれません。

アクセス権/リフレッシュトークンをクレームとして保存するには、SaveTokensAsClaimsオプションを使用します(デフォルトではRC1で有効)。この機能の詳細については、https://github.com/aspnet/Security/pull/257をご覧ください。

app.UseFacebookAuthentication(options => { 
    options.SaveTokensAsClaims = true; 
}); 

あなたは、任意の他の請求項のようにそれを取得することができます。

var token = User.FindFirst("access_token")?.Value 

注:RC2で、この機能が刷新され、トークンは、特許請求の範囲になく、認証プロパティに格納されません。https://github.com/aspnet/Security/pull/698

+1

あなたは私の友人はちょうど仕事で私のお尻を保存しました。私はそれらにASP.NETコアを使用するよう奨励しましたが、私たちはインターネットを数日間検索し、方法を見つけることができませんでした。ありがとう! – gdoron

+0

ようこそ。私は助けてくれるとうれしいです) – Pinpoint

+0

この情報はどうやって来ましたか?私はこのミドルウェアに関する文書はどこですか?あなたが私のために参照できる場合plz – Ahmad

0

@Pinpointの回答へのアップデート:現在のバージョンには、SaveTokensAsClaimsのオプションはもうありません。代わりに、今そこにあるSaveTokensoption

は、アクセスとリフレッシュトークンが許可に成功した後 Http.Authentication.AuthenticationPropertiesに格納する必要があるかどうかを定義します。このプロパティは、最終的な認証Cookieのサイズを減らすために、デフォルトでfalseに設定されています。

デフォルトではfalseであり、クレームには格納されません。 AuthenticationTokenExtensionsクラスが追加されました

これらのトークンを取得するには、拡張メソッドのいずれかをAuthenticationTokenExtensionsクラスで定義して使用します。たとえば、次のコードは動作するはずですコントローラのアクションメソッドで:githubのから

var token = await HttpContext.Authentication.GetTokenAsync("access_token"); 

関連リンク:

関連する問題