C# 使用外部提供程序识别服务器4。重定向到具有id_令牌的前端页面
我已经将IdentityServer4配置为Facebook和Google等外部提供商。此外,还添加了用于注册、登录和其他内容的默认UI。我的问题是如何重定向到带有id_标记的页面? 现在我的流程是:C# 使用外部提供程序识别服务器4。重定向到具有id_令牌的前端页面,c#,asp.net-core,asp.net-identity,identityserver4,C#,Asp.net Core,Asp.net Identity,Identityserver4,我已经将IdentityServer4配置为Facebook和Google等外部提供商。此外,还添加了用于注册、登录和其他内容的默认UI。我的问题是如何重定向到带有id_标记的页面? 现在我的流程是: 打开身份/帐户/登录 点击Facebook POST/Identity/Account/ExternalLogin 重定向到https://www.facebook.com/v4.0/dialog/oauth?client_id=xxx 重定向到/signin facebook?code= 现在我
身份/帐户/登录
李>
/Identity/Account/ExternalLogin
https://www.facebook.com/v4.0/dialog/oauth?client_id=xxx
李>
/signin facebook?code=
/Identity/Account/ExternalLogin?returnUrl=%2F&handler=Callback
/Identity/Account/ExternalLogin?returnUrl=%2F&handler=Callback
?
我需要它让我的前端通过oidc客户端继续使用API
我在3.10视频中的《使用OpenID和OAuth2保护Angular应用》课程中看到了这一点,但Brian Noyes没有使用外部提供商。步骤2-6是在Identity Server应用程序上,而不是在您的客户端应用程序上。单击Facebook登录时,用户将被重定向到Facebook的登录页面并输入凭据,Facebook将向identity server应用程序返回代码(如果使用代码流),然后identity server应用程序将向Facebook的令牌端点发送post请求,其中包含交换id令牌/访问令牌的代码,identity server应用程序获取id令牌后,它将解码令牌并获取用户的声明,然后创建identity server自己的令牌,最后返回到您的客户端应用程序 Identity server将以
ExternalLogin
方法处理外部登录,在身份验证流程中,您不能中断以将ID令牌返回到客户端。如果您需要facebook的ID令牌,您可以将代码缓存在ExternalLogin
方法中,最后返回到客户端应用程序,例如,将令牌添加到令牌响应。检查它是否有用
更新:
要在ExternalLogin的回调
函数中获取id令牌,您可以尝试以下步骤:
options.SaveTokens=true
在Identity Server中的Facebook登录配置中添加OpenIDConnect回调
函数中使用以下代码获取id令牌:
var result = await HttpContext.AuthenticateAsync(IdentityServer4.IdentityServerConstants.ExternalCookieAuthenticationScheme);
var tokens = result.Properties.GetTokens();
var idToken = tokens.Where(x => x.Name.Equals("id_token")).FirstOrDefault().Value;
然后我如何在前端获得id_令牌以继续使用API?我的目的是创建带有#id_令牌=xxx的登录后页面,但在第6步中,我被重定向到没有id_令牌的页面。