嗨嗨,
我对整个OAuth2和Spring安全都很陌生。我是一个学生,希望能在这个主题上得到任何帮助。
我想为我的项目网站实现OAuth2登录。很多像那些网站,你登录一次在开始,它坚持在整个网站的使用(直到注销)。
我使用来自OAuth2AuthenticationToken
的名称和电子邮件来检索当前登录用户的信息,以形成一个配置文件。
所有的@GetMapping
路径都很好。但是,当我尝试发布此表单时:
<form method="post" action="/api/adddrink">
<div class="input-group mb-3">
<button type="submit" data-th-value="${cocktailDetails.idDrink}"
name="idDrink">Add to Profile</button>
</div>
</form>
到我的@RestController
上的以下路径:/api/adddrink
我得到了一个错误403。我最初以为这可能是我的@RestController
有重定向。但是,我很快就发现代码甚至没有运行。
检查请求头,我看到JSESSIONID存在,cookie也存在。
我已经检查了几个教程都没有用。需要注意的是,我没有安全配置。
到目前为止,我为实现OAuth2:
1.添加了以下依赖项:spring-boot-starter-oauth2-client
1.将应用程序.yml文件设置为如下所示:
spring:
redis:
database: 0
host: ${redis.host}
port: ${redis.port}
username: default
security:
oauth2:
client:
registration:
github:
clientId: ${GITHUB_CLIENT_ID}
clientSecret: ${GITHUB_CLIENT_SECRET}
google:
clientId: ${GOOGLE_CLIENT_ID}
clientSecret: ${GOOGLE_CLIENT_SECRET}
1.对于我需要登录用户信息的所有路径,我使用了以下方法:
@Controller
public class FrontEndController {
@GetMapping(path = "/profile")
public String currentUserName(
OAuth2AuthenticationToken token) {
String currentUserName = token.getPrincipal().getAttribute('name);
return currentUserName;
}
一切都很好。直到我张贴上述表格:/
1条答案
按热度按时间utugiqy61#
您的“API”是一个Oauth2资源服务器,您的网页是该资源服务器的客户端。
我没有看到此资源服务器的任何安全配置。它应该通过对JWT进行解码或在authorization-server上自检不记名标记来从
Authorization
标头(而不是Jsessionid)填充安全上下文。您可以从将客户端和资源服务器拆分到不同的应用程序中开始,以更好地了解它们各自的配置(您必须在资源服务器上配置CORS,以允许来自客户端套接字的请求)
此处为资源服务器配置示例:https://github.com/ch4mpy/spring-addons/tree/master/samples%2Ftutorials