C# IdentityServer4直接链接到Facebook身份验证

C# IdentityServer4直接链接到Facebook身份验证,c#,asp.net-core,identityserver4,C#,Asp.net Core,Identityserver4,我有一个IdentityServer4应用程序,它集成了Facebook,运行良好 我还有一个Angular2应用程序,它使用IdentityServer。目前,如果用户想通过Facebook登录,他们必须单击“登录”,这会将他们带到IdentityServer,然后单击Facebook按钮 我想在我的Angular应用程序上有一个“Facebook”按钮,然后自动将它们直接重定向到Facebook,绕过主登录屏幕 我注意到下面这行代码: public async Task<IAction

我有一个IdentityServer4应用程序,它集成了Facebook,运行良好

我还有一个Angular2应用程序,它使用IdentityServer。目前,如果用户想通过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);
    }
    ...
}
公共异步任务登录(字符串返回URL)
{
...
if(vm.IsExternalLoginOnly)
{
//只有一个登录选项
返回ExternalLogin(vm.ExternalProviders.First().AuthenticationScheme,返回URL);
}
...
}
这基本上就是我想要的,自动重定向到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);
}
公共异步任务FacebookLogin(字符串返回URL)
{
var vm=await_account.BuildLoginViewModelAsync(returnUrl);
//只有一个登录选项
返回ExternalLogin(vm.ExternalProviders.First(x=>x.DisplayName.ToUpper()==“FACEBOOK”).AuthenticationScheme,返回URL);
}
虽然这会直接重定向到Facebook并进行身份验证,但不会重定向回呼叫应用程序。我可以看到关于无效重定向URI的错误日志,我想这是因为我没有调用
connect/authorize

那么,有没有一种方法可以将附加参数传递到
connect/authorize
以指定使用Facebook,然后我可以在控制器中使用它,或者调用其他方法


感谢

在OIDC规范中已经有了这样做的规定,IdentityServer4确实支持这样做


在Angular2 oidc客户端配置中包括
acr\u值
参数。这样的值应该告诉Identity Server将您的请求转发到身份提供者:“idp:oidc facebook”。当然,该IdP需要在您的IdentityServer实例中注册。

谢谢,我希望这是一个简单的实现!文件里肯定没提到。不过请注意,我必须将值设置为“idp:Facebook”才能正常工作,而且它区分大小写。