Asp.net mvc 具有基于Cookie的外部身份提供程序登录和令牌委派的单页应用程序

Asp.net mvc 具有基于Cookie的外部身份提供程序登录和令牌委派的单页应用程序,asp.net-mvc,identityserver4,oidc-client-js,Asp.net Mvc,Identityserver4,Oidc Client Js,如何使用第三方开放id连接提供程序(如Google或Microsoft)为单页应用程序创建无缝登录流,然后从外部提供程序返回的现有jwt令牌生成新的jwt令牌,而无需刷新页面 例如,我希望用户能够登录Google,然后被带回我的站点,在那里我使用IdentityServer4验证令牌服务器端,然后提取某些声明并生成新的JWT(我自己的逻辑) 是否存在一个现有的IdentityServer4端点,该端点在重定向时验证来自开放Id提供程序的JWT令牌,然后再使用什么最佳方法注入我自己的令牌创建流?最

如何使用第三方开放id连接提供程序(如Google或Microsoft)为单页应用程序创建无缝登录流,然后从外部提供程序返回的现有jwt令牌生成新的jwt令牌,而无需刷新页面

例如,我希望用户能够登录Google,然后被带回我的站点,在那里我使用IdentityServer4验证令牌服务器端,然后提取某些声明并生成新的JWT(我自己的逻辑)

是否存在一个现有的IdentityServer4端点,该端点在重定向时验证来自开放Id提供程序的JWT令牌,然后再使用什么最佳方法注入我自己的令牌创建流?最终的结果是一个理想的cookie,其中包含我的新JWT令牌,现在将在SPA发出的每个http请求上发送该令牌

我的最佳猜测是使用oidc js客户端并为Google设置用户管理器,例如:

var mgr = new Oidc.UserManager({
    authority: "https://accounts.google.com/.well-known/openid-configuration",
    client_id: "---",
    redirect_uri: "http://localhost:60720/account/callback",
    response_type: "id_token token",
    scope: "openid profile email",
    post_logout_redirect_uri: "http://localhost:60720/spa",
});

/*...*/
mgr.signinRedirect();
然而,在重定向中,我需要Google向我的控制器发送一个cookie,然后控制器将使用IdentityServer验证令牌,提取一些声明,如用户id,然后为我的API生成一个新令牌。这假设我正在使用IdentityServer托管我自己的身份提供程序。如何使用IdentityServer4完成最后一部分

这对于MVC模式来说很简单,因为令牌是在调用重定向回调后在回发上生成的。在SPA中,应该有最小的重定向,理想情况下,在弹出窗口允许用户登录,然后SPA接管的地方,没有重定向。我一直无法弄清楚如何从外部身份提供者重定向到我的IdentityServer4身份验证服务器或MVC服务器,并在最小程度上中断实际配置的情况下生成新令牌


Google建议服务器必须验证令牌()。一个可能的解决方案是在重定向回调中生成我的新令牌(在其验证之后)。但是,IdentityServer4不是应该验证令牌吗,或者我必须自己在服务器上验证令牌吗?IdentityServer4在令牌验证中扮演什么角色。我不想亲自编写这一步。

我最终用Identity Server端点创建了自己的授权类型,只是为了将第三方身份验证cookie交换为基于JSON承载的内部令牌。

您最终解决了这个问题吗?怎样?