spring-security 错误403尽管有一个有效的JSESSIONID(Sping Boot )

hgncfbus  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(202)

嗨嗨,
我对整个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;
}

一切都很好。直到我张贴上述表格:/

utugiqy6

utugiqy61#

您的“API”是一个Oauth2资源服务器,您的网页是该资源服务器的客户端
我没有看到此资源服务器的任何安全配置。它应该通过对JWT进行解码或在authorization-server上自检不记名标记来从Authorization标头(而不是Jsessionid)填充安全上下文。
您可以从将客户端和资源服务器拆分到不同的应用程序中开始,以更好地了解它们各自的配置(您必须在资源服务器上配置CORS,以允许来自客户端套接字的请求)
此处为资源服务器配置示例:https://github.com/ch4mpy/spring-addons/tree/master/samples%2Ftutorials

相关问题