带有外部提供程序的 IdentityServer4。使用 id_token 重定向到前端页面
IdentityServer4 with external provider. Redirect to frontend page with id_token
我已经使用 Facebook 和 Google 等外部提供商配置了 IdentityServer4。还为注册、登录和其他内容添加了默认 UI。我的问题是如何使用 id_token 重定向到页面?
现在我的流程是:
- 打开
Identity/Account/Login
;
- 点击 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-client 继续使用 API。
我在 3.10 视频的 Securing Angular Apps with OpenID and OAuth2
pluralsight 课程中看到它,但 Brian Noyes 没有使用外部提供商。
第 2-6 步是针对 Identity Server 应用程序,而不是您的客户端应用程序。单击 Facebook 登录时,用户将被重定向到 facebook 的登录页面并输入凭据,facebook 将 return 代码(如果使用代码流)到身份服务器应用程序,然后身份服务器应用程序将发送一个 post使用交换 id token/access 令牌的代码请求 facebook 的令牌端点,在身份服务器应用程序获取 id 令牌后,它将解码令牌并获取用户的声明,然后创建身份服务器自己的令牌,最后 return 到您的客户端应用程序 .
身份服务器将在 ExternalLogin
方法中处理外部登录,您不能在身份验证流程中中断向您的客户端发送 return ID 令牌。如果需要facebook的ID token,可以把代码缓存在ExternalLogin
方法中,最后return到客户端app,比如把token添加到token response中。检查 并检查它是否有帮助。
更新:
要在 ExternalLogin 的 Callback
函数中获取 id token,您可以尝试以下步骤:
在 Identity Server 的 Facebook 登录配置 AddOpenIdConnect
中设置 options.SaveTokens = true;
。
在Callback
函数中使用以下代码获取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;
我已经使用 Facebook 和 Google 等外部提供商配置了 IdentityServer4。还为注册、登录和其他内容添加了默认 UI。我的问题是如何使用 id_token 重定向到页面? 现在我的流程是:
- 打开
Identity/Account/Login
; - 点击 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-client 继续使用 API。
我在 3.10 视频的 Securing Angular Apps with OpenID and OAuth2
pluralsight 课程中看到它,但 Brian Noyes 没有使用外部提供商。
第 2-6 步是针对 Identity Server 应用程序,而不是您的客户端应用程序。单击 Facebook 登录时,用户将被重定向到 facebook 的登录页面并输入凭据,facebook 将 return 代码(如果使用代码流)到身份服务器应用程序,然后身份服务器应用程序将发送一个 post使用交换 id token/access 令牌的代码请求 facebook 的令牌端点,在身份服务器应用程序获取 id 令牌后,它将解码令牌并获取用户的声明,然后创建身份服务器自己的令牌,最后 return 到您的客户端应用程序 .
身份服务器将在 ExternalLogin
方法中处理外部登录,您不能在身份验证流程中中断向您的客户端发送 return ID 令牌。如果需要facebook的ID token,可以把代码缓存在ExternalLogin
方法中,最后return到客户端app,比如把token添加到token response中。检查
更新:
要在 ExternalLogin 的 Callback
函数中获取 id token,您可以尝试以下步骤:
在 Identity Server 的 Facebook 登录配置
AddOpenIdConnect
中设置options.SaveTokens = true;
。在
Callback
函数中使用以下代码获取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;