如何在react前端使用spring boot cas身份验证

k2fxgqgv  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(320)

我的应用程序有一个api服务器(springboot)和一个面向客户机的服务器(react),react服务器将代表经过身份验证的用户发出api请求。对于身份验证,我使用第三方提供的cas服务器。
我使用了java apereo cas客户端(版本3.6.2),并为react应用程序添加了以下api端点以调用:

@RestController
public class CASController {

    @Value("${cas.server-url-prefix}")
    private String CASUrl;

    @GetMapping("/login")
    public String getCASUserId(HttpServletRequest request){
        return request.getRemoteUser();

    }

    @GetMapping("/logout")
    public void logout(HttpServletRequest request, HttpServletResponse response) {
        HttpSession session = request.getSession(false);
        if(session != null || !request.isRequestedSessionIdValid()) {
            String id = session.getId();
            session.invalidate();
            log.info("JSESSIONID: " + id + " is valid: " + request.isRequestedSessionIdValid());
        }
        try{
            response.sendRedirect(CASUrl + "/logout");
        }
        catch (IOException | IllegalStateException e){
            throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getLocalizedMessage());
        }

    }
}

如果springboot应用程序直接与客户机交互,那么上面的端点就可以工作,但是它不能,它接受来自react服务器的请求。当react应用程序尝试调用时: localhost:8080/login ,由于重定向而失败。
解决这个问题的一种方法是从react应用程序调用cas服务器,然后将所需的信息(服务url和cas服务器发出的票证)发送到后端,如果票证验证成功,让后端进行票证验证调用,然后对用户进行身份验证,并将会话id发送回react应用程序,以供后续请求使用。
我的问题是:
解决方法有意义吗?身份验证在前端(从cas服务器获取票证)和后端(使用cas服务器验证已颁发的票证并发出会话)之间进行。如果没有,有什么更好的解决办法?
为了解决这个问题,我想我需要使用Spring Security ,而不是javaapereo-cas-client?如果是这样,我该怎么做?
我试过这样的方法:
票证验证终结点:

@GetMapping("/login")
    public String getCASUserId(@RequestParam @NotBlank String URL,
                               @RequestParam @NotBlank String ticket,
                               HttpServletRequest request){

        // make the call the the CAS server for ticket validation
        String userId = userService.getUserId(url, ticket);

        HttpSession session = request.getSession();
        session.setAttribute("userId", userId);

        return userId;

    }

验证票证,发出会话,但实际上没有保护端点,因为既没有启用spring security,也没有启用javaapereo cas客户端。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题