2017-07-17 54 views
1

我有一個IdentityServer4應用程序,它具有Facebook集成,這是工作正常。IdentityServer4直接鏈接到Facebook身份驗證

我也有一個使用IdentityServer的Angular2應用程序。目前,如果用戶想通過Facebook登錄,他們必須點擊「登錄」,然後點擊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規範做到這一點。

在您的Angular2 oidc-client配置中包含acr_values參數。像這樣的值應該告訴Identity Server將您的請求轉發到身份提供者:「idp:oidc-facebook」。當然,該IdP將需要註冊您的IdentityServer實例。

+0

謝謝,希望這是一個簡單的實施!必須在文檔中錯過。儘管如此,我必須將值設置爲'idp:Facebook'才能正常工作,並且區分大小寫。 – ADringer