我有一个与 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 然后我可以在我的 Controller 中使用,或者调用不同的方法?谢谢
最佳答案
在 OIDC 规范中已经有一个规定来做到这一点,IdentityServer4 确实支持。
包括 acr_values
Angular2 oidc-client 配置中的参数。像这样的值应该告诉身份服务器将您的请求转发到身份提供者:“idp:oidc-facebook”。当然,该 IdP 需要向您的 IdentityServer 实例注册。
关于c# - IdentityServer4 直接链接到 Facebook 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45152961/