2017-07-17 57 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