使用Spring Boot和Angular 2 CLI进行Google OAuth2身份验证

问题描述 投票:2回答:2

我需要将社交登录集成到我的Web应用程序中。我使用Spring Boot作为后端,Angular 2作为前端技术使用。我按照qazxsw poi教程设置了我的项目。

这非常有效,Spring Boot在http:/ localhost:8080上运行,Angular 2在http:/ localhost:4200上运行。原因是我使用Angular-cli进行实时重载开发服务器功能。

由于Cross Origin策略,angular项目需要使用代理。如前一个教程中所述,您需要配置proxy.conf.json文件:

this

如果这样做,您可以访问Spring API,如下所示:http:/ localhost:4200 / api / users例如(每个'/ api'请求将被转发到Spring服务器)。

以上所有事情都很完美。现在我需要在谷歌登录时使用Oauth2。我尝试了许多像{ "/api": { "target": "http://localhost:8080", "secure": false } } 这样的教程,但我似乎无法设法解决这个问题。

如果我尝试实现这个并导航到http:/ localhost:8080(从Spring Boot地址)我被重定向到谷歌登录页面,但是当尝试相同的事情,例如http:/ localhost:4200 / api / authenticate i只需始终重定向到http:/ localhost:4200 / login immediatly,而无需将我重定向到登录页面。

我在网上看了evrywhere但似乎无法找到这个特殊的问题。任何人都可以帮助我理解或者我做错了什么,也许有人会有很好的示例代码!

angular spring-boot oauth-2.0 angular-cli google-login
2个回答
0
投票

我找到了解决问题的方法。首先我有'href = / api / authenticate'的登录链接,但这不起作用!

注意:@ EnableOAuth2Sso标准保护服务器上的每个路径,因此您只需要在受保护的路径上访问API,以便重定向到登录页面

出于某种原因,http:/ 4200 / api / authenticate什么也没做,只是立即将我重定向到http:/ 4200 / login(我想如果身份验证失败或未经过身份验证,这必须是@ EnableOAuth2Sso的标准行为?)

所以我将我的href改为'href = http:/ localhost:8080 / api / authenticate'。这完美地工作,并将我重定向到谷歌登录页面。

我面临的另一个问题是重定向网址。我尝试将重定向url直接设置为'http:/ localhost:4200 / profile,登录到用户配置文件后进行导航,但由于某些奇怪的原因,这不起作用。

经过一些测试,我发现你需要首先重定向到你的api域(不明白为什么)。

所以我将重定向url设置为http:/ localhost:8080 / callback,然后我重定向到端口4200上的配置文件页面。

this

经过长时间的搜索和测试后,我觉得这在任何地方都没有记录。


0
投票

对不起,如果我在这个答案中弄错了,因为这是一段时间以前,我不记得确切。但我有一个登录按钮,如下面的代码片段所示:

@GetMapping("/callback")
void redirect(HttpServletResponse response) throws IOException {
    response.sendRedirect("http://localhost:4200/profile");
}

当您使用@ EnableOAuth2Sso时,每个路径都会通过OAuth2身份验证自动保护。因此,当您单击登录按钮时,您将自动进入google身份验证页面。

当您成功进行身份验证时,我重定向到以下代码:

<a href="http://localhost:8080/api/login" class="btn loginBtn loginBtn-google">Login with Google</a>

正如我在第一个答案中所解释的那样,由于一些奇怪的原因,它是nessecary,回调给你Spring域而不是你的前端域。如上面的代码所示,然后重定向正确的forntnd页面。

(随着时间的推移,我改变了路径的名称,如果你想知道,但这应该工作)

© www.soinside.com 2019 - 2024. All rights reserved.