【问题标题】:IdentityServer4 link directly to Facebook authenticationIdentityServer4 直接链接到 Facebook 身份验证
【发布时间】:2017-07-17 20:17:26
【问题描述】:

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

我还有一个使用 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,然后我可以在我的控制器中使用它,或者调用不同的方法?

谢谢

【问题讨论】:

    标签: c# asp.net-core identityserver4


    【解决方案1】:

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

    在您的 Angular2 oidc-client 配置中包含 acr_values 参数。像这样的值应该告诉身份服务器将您的请求转发给身份提供者:“idp:oidc-facebook”。当然,该 IdP 需要在您的 IdentityServer 实例中注册。

    【讨论】:

    • 谢谢,希望这是一个简单的实现!一定在文档中错过了。不过请注意,我必须将值设置为 'idp:Facebook' 才能正常工作,并且区分大小写。
    猜你喜欢
    • 1970-01-01
    • 2020-12-21
    • 2019-03-27
    • 2012-04-25
    • 2018-01-02
    • 1970-01-01
    • 2018-10-31
    • 2016-04-08
    • 2010-09-19
    相关资源
    最近更新 更多