当前位置: 首页 > 知识库问答 >
问题:

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

仲孙俊贤
2023-03-14

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

这工作得很好,Spring Boot运行在超文本传输协议:/localhost:8080上,Angular 2运行在超文本传输协议:/localhost:4200上。这样做的原因是,我使用Angulal-cli作为实时重载开发服务器功能。

由于跨原点策略,角度项目需要使用代理。如前一教程所述,您需要配置代理。conf.json文件:

{
  "/api": {
    "target": "http://localhost:8080",
    "secure": false
  }
}

如果这样做,您可以按以下方式访问Spring API:超文本传输协议:/localhost:4200/api/users(例如,每个'/api'请求都将转发到Spring服务器)。

以上所有的工作都很好。现在我需要使用Oauth2和google登录。我试过很多像这样的教程,但我似乎无法解决这个问题。

如果我尝试实现这一点并导航到http:/localhost:8080(从Spring启动地址),我会被重定向到google登录页面,但是当尝试同样的事情时,例如http:/localhost:4200/api/authenticate,我总是立即重定向到http:/localhost:4200/login,而不会将我重定向到登录页面。

我在网上到处找,但似乎找不到这个问题。有谁能帮我理解我做错了什么,也许有人有很好的示例代码!

共有2个答案

萧玮
2023-03-14

对不起,如果我的回答错了,因为这是很久以前的事了,我记不清了。但我有一个登录按钮,如下面的代码片段所示:

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

当@enableAuth2sso就绪时,每个路径都会自动通过OAuth2身份验证进行保护。因此,当你点击登录按钮时,你会自动进入谷歌认证页面。

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

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

正如我在我的第一个回答中解释的那样,出于某种奇怪的原因,回调到你的Spring域而不是你的前端域是不明智的。如上面的代码所示,然后我重定向到正确的forn的页面。

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

齐迪
2023-03-14

我找到了解决问题的办法。首先,我有一个登录链接href=/api/验证,但这不工作!

注意:@enableAuth2sso standard保护服务器上的每个路径,因此您只需访问路径上的API,该路径已被保护,可以重定向到登录页面

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

因此,我将href改为“href=http:/localhost:8080/api/authenticate”。这很好地工作,并将我重定向到谷歌登录页面。

我面临的另一个问题是重定向网址。我尝试将重定向网址直接设置为超文本传输协议:/localhost:4200/profile,以便在登录到用户配置文件后导航,但由于一些奇怪的原因,这再次不起作用。

经过一些测试,我发现您需要先重定向回api域(不知道为什么)。

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

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

在搜索和测试了很久之后,我觉得这在任何地方都没有记录。

 类似资料:
  • 我正在使用SpringBoot开发具有微服务架构的Rest Backend。为了保护endpoint,我使用了JWT令牌机制。我正在使用Zuul API网关。 如果请求需要权限(来自JWT的角色),它将被转发到正确的微服务。Zuul api网关的“WebSecurityConfigrerAdapter”如下。 这样,我必须在这个类中编写每个请求授权部分。因此,我希望使用方法级安全性,即“Enabl

  • 我正在编写一个程序,用于验证通过HTTP POST发送的用户名和密码,并根据ldap进行验证,无论验证是否成功,都将响应发送回用户。 我的Websecurity配置器实现 我的测试服务器.ldif

  • 我在Spring Boot web应用程序中有一个非常特殊的要求:我有内部和外部用户。内部用户通过使用KeyCoap身份验证登录到web应用程序(他们可以在web应用程序中工作),但我们的外部用户通过简单的Spring Boot身份验证登录(他们可以做的只是下载web应用程序生成的一些文件) 我想做的是使用多个身份验证模型:除了/download/*之外的所有路径都要通过我们的keyCoap身份验

  • 问题内容: 确保GWT + Tomcat应用程序执行身份验证和授权的最佳策略是什么? 问题答案: 有两种基本策略: 确保入口点; 保护远程服务。 最简单的方法是使用常规的Web应用程序安全工具来限制对GWT生成的html / js文件的访问: 春季安全; web.xml约束。 这样可以让您拥有eg 和。 保护远程服务 如果上述解决方案还不够,您可以进行更深入的研究。我已经通过Spring Secu

  • 我有一个asp。net(C#)设置为使用LDAP进行身份验证。一切正常,我可以和我们目录中的任何用户一起登录。问题是,我需要将某些页面限制为特定组中的人。我正在使用登录查看帐户文件夹的方法。 我的网站设计很简单,它有三个页面,一个供所有人查看(账户文件夹之外),另外两个需要身份验证。我希望一个组可以访问两个网页,另一个组只能访问其中一个网页。 我试过: 但不管我的用户不在该组中。我有一个LDAP浏

  • 问题内容: 以下代码成功连接到我的Ruby on Rails API,并使用AFNetworking返回JSON。我需要做什么来进行编辑以传递用户名和密码,以便我的API可以使用HTTP基本身份验证? 我已经阅读了他们的文档,但是我对Objective-C和AFNetworking还是陌生的,目前还没有意义。 问题答案: AFNetworking 2.x的答案已更新 对于AFNetworking

  • 问题内容: 我想为在Raspberry Pi上运行并像本地服务器一样工作的软件制作一些更新脚本。该服务器应连接到Web上的主服务器,以获取软件更新并验证软件的许可证。为此,我设置了两个python脚本。我希望它们通过TLS套接字连接。然后,客户端检查服务器证书,然后服务器检查它是否是授权的客户端之一。我在此页面上找到了解决方案。 现在还有一个问题。我想知道 哪个客户端 (取决于证书)正在建立连接。

  • 但请求呢?和是用户的属性,但应将它们发送到endpoint。如果我将资源发送到endpoint,则没有多大意义。 对此有没有办法,遵循JSONAPI并保持API的意义?