我已经设置了Identity Server 4的实例,并为客户端启用了授权代码授予。我可以使用此赠款轻松登录我的c#MVC应用程序。我也有一个Android应用程序,我也想绑定到它。理想情况下,我将能够使用本地Google / Facebook登录机制,以便用户获得最佳体验。但是,如果使用这些令牌,则会得到一个Google / Facebook令牌,而不是从Identity Server派生的令牌,这在代表用户与我们的API通讯时会产生授权问题。
我是否可以在Identity Server中使用某种机制,以便将Google / Facebook令牌交换为Identity Server令牌?这是个好主意吗?
Stack Exchange应用程序可以执行此操作,但是我不能肯定地说它在后台使用了什么技术。我猜是TL; DR;我想使用我的应用程序和Identity Server模拟Stack Exchange应用程序的登录工作流程,但是在本机登录方面需要一些指导。
请参阅下面的Stack Exchange登录工作流程。
点击“登录”后:
单击Google或Facebook将显示本机登录屏幕。单击“使用另一个OpenId登录”会将您重定向到通过浏览器加载的标准登录。
答案 0 :(得分:0)
有可能。甚至正式文档也有example用于Google集成 看起来像
services.AddAuthentication()
.AddGoogle("Google", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.ClientId = "...";
options.ClientSecret = "...";
})
并使用
触发通话var callbackUrl = Url.Action("ExternalLoginCallback");
var props = new AuthenticationProperties
{
RedirectUri = callbackUrl,
Items =
{
{ "scheme", provider },
{ "returnUrl", returnUrl }
}
};
return Challenge(provider, props);
最终它将接受Google生成的令牌作为自己的令牌。您也可以将其用于自己的外部身份验证方式-Facebook,Twitter等。
希望有帮助。