C# 使用外部提供程序识别服务器4。重定向到具有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= 现在我

我已经将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?returnUrl=%2F&handler=Callback
  • 如何配置从#5步骤重定向到特定页面,而不是重定向到
    /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_令牌的页面。