2017-07-17 6 views
1

私はFacebookの統合を持つIdentityServer4アプリケーションを持っていますが、これはうまくいきます。IdentityServer4はFacebookの認証に直接接続します

また、IdentityServerを使用するAngular2アプリもあります。現在、ユーザーがFacebook経由でログインしたい場合は、「ログイン」をクリックしてIdentityServerに移動してから、「Facebook」ボタンをクリックする必要があります。

Angularアプリに「Facebook」ボタンがあり、メインのログイン画面をバイパスして自動的にFacebookにリダイレクトされます。

私は次の行にコード気づい:

public async Task<IActionResult> Login(string returnUrl) 
{ 
    ... 
    if (vm.IsExternalLoginOnly) 
    { 
     // only one option for logging in 
     return ExternalLogin(vm.ExternalProviders.First().AuthenticationScheme, returnUrl); 
    } 
    ... 
} 

自動的にFacebookのにリダイレクトし、私が欲しいものは基本的です。だから私は、次のメソッドを追加しました:

public async Task<IActionResult> FacebookLogin(string returnUrl) 
{ 
    var vm = await _account.BuildLoginViewModelAsync(returnUrl); 

    // only one option for logging in 
    return ExternalLogin(vm.ExternalProviders.First(x => x.DisplayName.ToUpper() == "FACEBOOK").AuthenticationScheme, returnUrl); 
} 

これはFacebookのにまっすぐにリダイレクトしないと認証しないが、それは呼び出し元のアプリにリダイレクトされません。私は無効なredirectUriに関して記録されたエラーを見ることができます。これは私がconnect/authorizeに電話していないためだと思いますか?

connect/authorizeに追加のパラメータを渡して、コントローラで使用できるFacebookを使用するように指定する方法や、別の方法を呼び出す方法がありますか?

おかげ

答えて

1

実際IdentityServer4によってサポートされているOIDC仕様でこれを行うための準備はすでにあります。

acr_valuesパラメータをAngular2 oidc-client構成に含めます。このような値は、アイデンティティ・サーバーに、アイデンティティ・プロバイダにリクエストを転送するよう指示する必要があります。「idp:oidc-facebook」もちろん、IdPをIdentityServerインスタンスに登録する必要があります。

+0

ありがとう、それは簡単な実装だったと思っていた!ドキュメントでそれを見逃している必要があります。しかしちょっとメモしておけば、値を 'idp:Facebook'に設定する必要がありました。大文字と小文字が区別されます。 – ADringer

関連する問題