Попытка переместить параметры URL на перенаправленный URL из URL другого запроса - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь настроить механизм входа на платформу Discourse с помощью единого входа.На данный момент кажется, что это работает, но только если пользователь уже вошел на основной сайт, он может автоматически войти на форум.

Чего я пытаюсь достичь в концедень есть;как только пользователь пытается войти на форум, он должен немедленно перенаправить на страницу, относящуюся к основному сайту, если пользователь не вошел на основной сайт, ему необходимо увидеть страницу входа на основном сайте и после того, как он выполнил вход в систему, пользователь снова должен быть перенаправлен на форум.

Итак, у меня есть специальный URL для sso на моем основном сайте, как: example.com/ssoLogin Вот метод запроса:

@GetMapping("/ssoLogin")
    String ssoRequest(RedirectAttributes redirectAttributes, @RequestParam String sso, @RequestParam String sig ) throws NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException {

        String a ="";

        if (checksum("I_love_sso", sso).equals(sig)){

            HttpSession session = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getSession();
            User loggedUser = (User) session.getAttribute("user");
            if(loggedUser!=null){

                String urlDecode = URLDecoder.decode(sso,"UTF-8");
                String nonce = new String(Base64.getUrlDecoder().decode(urlDecode.getBytes("UTF-8")));
                String urlEncode = nonce
                        + "&name=" + URLEncoder.encode(loggedUser.getName(),"UTF-8")
                        + "&username=" + URLEncoder.encode(loggedUser.getUsername(),"UTF-8")
                        + "&email=" + URLEncoder.encode(loggedUser.getEmail(),"UTF-8")
                        + "&external_id=" + URLEncoder.encode(Long.toString(loggedUser.getId()),"UTF-8");
                String urlBase64 = new String(Base64.getUrlEncoder().encode(urlEncode.getBytes("UTF-8")));
                int length = 0;
                int maxLength = urlBase64.length();
                final int STEP = 60;
                String urlBase64Encode = "";
                while (length < maxLength) {
                    urlBase64Encode += urlBase64.substring(length, length + STEP < maxLength ? length + STEP : maxLength) + "\n";
                    length += STEP;
                }
                a = "redirect:http://forum.example.com/session/sso_login?sso=" + URLEncoder.encode(urlBase64Encode,"UTF-8") + "&sig=" + checksum("I_love_sso",urlBase64Encode);
            }else{
                redirectAttributes.addAttribute("sso",sso);
                redirectAttributes.addAttribute("sig",sig);
                a="redirect:/login";
            }
        }
        return a;
    }

Метод POST страницы входа на главную страницу моего сайта:

 @PostMapping("/login")
    ResponseEntity<?> loginRequest(@RequestParam String username, @RequestParam String password, @RequestParam(required = false)String sso, @RequestParam(required = false)String sig){

            try {
                authService.login(username, password);

                HttpSession session = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getSession();
                User loggedUser = (User) session.getAttribute("user");

            } catch (Exception e) {
                return ResponseEntity.ok(singletonMap("error", "Login credentials wrong!"));
            }
            if(sso==null && sig==null){
                return ResponseEntity.ok("/");
            }else{
                return ResponseEntity.ok("forum.example.com");
            }

    }

Метод GET моей страницы входа в систему:

@GetMapping("/login")
    String loginPage(@RequestParam(required = false) String sso, @RequestParam(required = false) String sig) {
        return "login";
    }

Итак, здесь, в моей реализации, даже я думаю, что sso и sigпараметры были перенесены на перенаправленный URL, не похоже, что он работает, потому что я был перенаправлен на главную страницу основного сайта.

...