我正在尝试为我的Angular应用和Spring Webflux后端使用VK进行社交登录。目前,我在后端有一个端点可以提供用户信息: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
标头,从而导致该机制失败。
有人可以推荐一种对角度/弹簧对使用OAuth2
的方法吗?我正在使用code
流,所以我想我首先需要在前端获取代码,然后将其发送到Spring后端,以便它更改访问令牌。
同时,我觉得我的方法可能是错误的,整个身份验证过程应该在后端进行,而前端应该只获得一个cookie,但是我无法弄清楚如何重定向AJAX请求从前端到VK登录页面,在后端进行处理,然后返回Angular应用。
答案 0 :(得分:3)
没有配置某些第三方软件(将启用来自您网站的跨源请求)或向您的应用添加服务器端API代码以完成登录过程,这是不可能的。
正如我们在评论中所述,您已经在两个请求周期内成功完成了登录流程。您可以使用相同的流程来获取有效的会话,然后重定向到您的单页应用程序。该cookie应该设置为仅HTTP cookie(以防止其他JavaScript劫持它),但这将使您能够针对服务器发出请求,而不会成功添加其他身份验证参数。在为API请求提供服务时,您将必须检查该cookie,并编写处理代码以提示用户是否存在该cookie,或者cookie不再有效。
希望有帮助!