OAuth2 Angular 和反应式 Spring 安全
OAuth2 with Angular and reactive Spring Security
我正在尝试使用 VK 为我的 Angular 应用程序和 Spring Webflux 后端实施社交登录。目前我在后端有一个端点来提供用户信息:localhost:8080/people/me
。我尝试通过以下方式在前端对用户进行身份验证:
ngOnInit(): void {
this.http.get(USER_INFO_URL)
.subscribe((resp: Response) => {
if (resp.status < 300) {
this.authenticated = true;
resp.json()
.then(vkUser => {
let fields: [string, string] = ['firstName', vkUser.firstName];
fields['lastName'] = vkUser.lastName;
this.user = new User(vkUser.id, fields);
});
} else {
window.location.href = AUTH_URL;
}
});
}
但是,当我的 Spring 应用程序将客户端重定向到 VK
进行身份验证时,VK
没有提供任何 CORS
headers,导致机制失败。
有人可以推荐一种将 OAuth2
用于 Angular/Spring 对的方法吗?我正在使用 code
流程,所以我想首先我需要在前端获取代码,然后将其发送到 Spring 后端,以便它更改访问令牌。
同时,我觉得我的做法可能是错误的,整个auth过程应该在后端进行,而前端应该只得到一个cookie,但我不知道如何重定向AJAX 从前端到 VK 登录页面的请求,在后端处理,然后 return 到 Angular app.
如果不配置某些第三方软件(这将启用来自您网站的跨源请求)或向您的应用程序添加服务器端 API 代码以完成登录过程,这是不可能的。
正如我们在评论中所做的那样,您已经成功地在几个请求周期内完成了登录流程。您可以使用相同的流程来获取有效会话,然后重定向到您的单页应用程序。该 cookie 应设置为仅 HTTP cookie(以防止其他 JavaScript 劫持它),但这将允许您向您的服务器发出请求,而无需成功添加额外的身份验证参数。当您为 API 请求提供服务时,您将必须检查该 cookie,并编写处理代码,在 cookie 不存在或不再有效时提示用户登录。
希望对您有所帮助!
我正在尝试使用 VK 为我的 Angular 应用程序和 Spring Webflux 后端实施社交登录。目前我在后端有一个端点来提供用户信息:localhost:8080/people/me
。我尝试通过以下方式在前端对用户进行身份验证:
ngOnInit(): void {
this.http.get(USER_INFO_URL)
.subscribe((resp: Response) => {
if (resp.status < 300) {
this.authenticated = true;
resp.json()
.then(vkUser => {
let fields: [string, string] = ['firstName', vkUser.firstName];
fields['lastName'] = vkUser.lastName;
this.user = new User(vkUser.id, fields);
});
} else {
window.location.href = AUTH_URL;
}
});
}
但是,当我的 Spring 应用程序将客户端重定向到 VK
进行身份验证时,VK
没有提供任何 CORS
headers,导致机制失败。
有人可以推荐一种将 OAuth2
用于 Angular/Spring 对的方法吗?我正在使用 code
流程,所以我想首先我需要在前端获取代码,然后将其发送到 Spring 后端,以便它更改访问令牌。
同时,我觉得我的做法可能是错误的,整个auth过程应该在后端进行,而前端应该只得到一个cookie,但我不知道如何重定向AJAX 从前端到 VK 登录页面的请求,在后端处理,然后 return 到 Angular app.
如果不配置某些第三方软件(这将启用来自您网站的跨源请求)或向您的应用程序添加服务器端 API 代码以完成登录过程,这是不可能的。
正如我们在评论中所做的那样,您已经成功地在几个请求周期内完成了登录流程。您可以使用相同的流程来获取有效会话,然后重定向到您的单页应用程序。该 cookie 应设置为仅 HTTP cookie(以防止其他 JavaScript 劫持它),但这将允许您向您的服务器发出请求,而无需成功添加额外的身份验证参数。当您为 API 请求提供服务时,您将必须检查该 cookie,并编写处理代码,在 cookie 不存在或不再有效时提示用户登录。
希望对您有所帮助!