将Google令牌交换为IdentityServer令牌

时间:2019-11-18 14:30:14

标签: android identityserver4

我已经设置了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登录工作流程。

enter image description here

点击“登录”后:

enter image description here 单击Google或Facebook将显示本机登录屏幕。单击“使用另一个OpenId登录”会将您重定向到通过浏览器加载的标准登录。

enter image description here

enter image description here

1 个答案:

答案 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等。

希望有帮助。