在spring和angular之间共享从oauth2提供程序接收的主对象

在spring和angular之间共享从oauth2提供程序接收的主对象,spring,angular,spring-boot,oauth-2.0,spring-security-oauth2,Spring,Angular,Spring Boot,Oauth 2.0,Spring Security Oauth2,我偶然发现了一个关于弹簧安全性和角度的问题 在my BE(Spring Boot应用程序)上,定义了OAuth2提供者,如Google、GitHub和Facebook 我的BE可以很好地使用这个提供者,因为我可以在所需的提供者上进行身份验证 问题是当我尝试将主对象发送到FE(Angular 6应用程序)时 当我尝试从rest端点订阅值时,我得到了未定义的值。 我假设这是因为SpringServlet为登录请求创建了一个新线程。 我正在从Angular应用程序执行登录请求 我看了几十篇教程和很多文

我偶然发现了一个关于弹簧安全性和角度的问题

在my BE(Spring Boot应用程序)上,定义了OAuth2提供者,如Google、GitHub和Facebook

我的BE可以很好地使用这个提供者,因为我可以在所需的提供者上进行身份验证

问题是当我尝试将主对象发送到FE(Angular 6应用程序)时

当我尝试从rest端点订阅值时,我得到了未定义的值。 我假设这是因为SpringServlet为登录请求创建了一个新线程。 我正在从Angular应用程序执行登录请求

我看了几十篇教程和很多文章,但我就是找不到答案。如果你有可能分享一些代码,或者给我一个链接,因为我肯定犯了一个愚蠢的错误,似乎在这里找不到答案

谢谢你的理解,祝你有愉快的一天。
:)

我假设您正在使用来自BE的授权代码流来验证与FE Angular应用程序交互的用户(在您的示例中是您)。否则,您将尝试使用客户端流对be客户端进行身份验证,并且不需要将“主体对象”返回给FE应用程序。如果我的假设是正确的。。。继续读下去

授权代码流程如下所示:

1) 用户以某种方式选择了一个身份验证提供者(例如:Google),该选择将作为未经身份验证的请求返回给BE中的某个端点

2) BE客户端接收该请求,最好由过滤器拦截,并且由于该请求未经身份验证,因此将浏览器重定向到所选身份验证提供者的授权端点

3) 然后,用户继续针对该提供商进行身份验证,该提供商在成功进行身份验证后返回一个响应,该响应将浏览器重定向到BE客户端端点。该重定向包含一个参数,该参数提供BE客户端将用于获取表示用户的idToken的代码。此时,重要的是要注意,浏览器尚未返回此重定向的任何响应

4) 然后,BE客户端继续向提供者的令牌端点发送常规HTTP请求,以及接收到的授权码。然后,提供者将idToken直接返回HTTP响应给BE客户端。所有这些都是在浏览器仍在等待对上次重定向的响应时发生的

5) BE客户端然后处理idToken(验证、验证、用户详细信息、会话等),只有在那时,才会最终将响应发送到浏览器,耐心等待代码重定向。该响应可能会提供一个标头或cookie,其中包含一个会话ID或令牌(您的选择),FE应用程序将能够为给定目的读取或使用该会话ID或令牌

该流程相对容易实现,并且需要最少的SS配置。必须使用permitAll()保留BE Client auth端点,否则将无法触发此流。此外,请确保,一旦FE应用程序启动。收到标头/cookie后,所有后续调用均应作为“已验证调用”处理。最后,确保记录无状态会话的危险以及cookie安全性,并始终使用HTTPS

杰克