OAuthController.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package com.icontrols.oauth.controller;
  2. import javax.servlet.http.HttpSession;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.http.HttpHeaders;
  6. import org.springframework.web.bind.annotation.RequestHeader;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RequestMethod;
  9. import org.springframework.web.bind.annotation.RequestParam;
  10. import org.springframework.web.bind.annotation.ResponseBody;
  11. import org.springframework.web.bind.annotation.RestController;
  12. import org.springframework.web.servlet.ModelAndView;
  13. import org.springframework.web.servlet.view.RedirectView;
  14. @RestController
  15. public class OAuthController {
  16. private static final Logger logger = LoggerFactory.getLogger(OAuthController.class);
  17. // http://127.0.0.1:8080/api/oauth2/authorize?client_id=clientid&redirect_uri=http://127.0.0.1:8080/api/oauth2/redirect&scope=scope&response_type=code&state=state
  18. @RequestMapping(value = "/api/oauth2/authorize", method = RequestMethod.GET)
  19. public @ResponseBody ModelAndView Authorize(@RequestHeader HttpHeaders headers,
  20. @RequestParam(value = "response_type", required = true) String responseType,
  21. @RequestParam(value = "client_id", required = true) String clientId,
  22. @RequestParam(value = "state", required = true) String state, @RequestParam(value = "scope") String scope,
  23. @RequestParam(value = "redirect_uri", required = true) String redirectUri, HttpSession httpSession) {
  24. ModelAndView mav = new ModelAndView();
  25. mav.setViewName("/view/authorize.html");
  26. httpSession.setAttribute("redirectUri", redirectUri);
  27. httpSession.setAttribute("state", state);
  28. return mav;
  29. }
  30. @RequestMapping(value = "/api/oauth2/auth", method = RequestMethod.GET)
  31. public @ResponseBody RedirectView Redirect(HttpSession httpSession) {
  32. // 웹뷰에서 사용자의 정보를 입력받아서 넘어와야함
  33. // 사용자 정보를 단지서버에 전송해 사용자 확인하는 절차필요
  34. String redirectUri = (String) httpSession.getAttribute("redirectUri");
  35. String code = "SampleCode"; // Code를 생성하고 이후에 토큰 요청을 수신했을 때 검사할 수 있어야 함.(DB저장 등이 필요함.)
  36. redirectUri += "?state=" + httpSession.getAttribute("state");
  37. redirectUri += "&code=" + code;
  38. logger.info(redirectUri);
  39. RedirectView redirectView = new RedirectView();
  40. redirectView.setUrl(redirectUri);
  41. return redirectView;
  42. }
  43. @RequestMapping(value = "/api/oauth2/token", method = RequestMethod.GET)
  44. public @ResponseBody RedirectView Token(HttpSession httpSession) {
  45. // 웹뷰에서 사용자의 정보를 입력받아서 넘어와야함
  46. // 사용자 정보를 단지서버에 전송해 사용자 확인하는 절차필요
  47. String redirectUri = (String) httpSession.getAttribute("redirectUri");
  48. String code = "SampleCode"; // Code를 생성하고 이후에 토큰 요청을 수신했을 때 검사할 수 있어야 함.(DB저장 등이 필요함.)
  49. redirectUri += "?state=" + httpSession.getAttribute("state");
  50. redirectUri += "&code=" + code;
  51. logger.info(redirectUri);
  52. RedirectView redirectView = new RedirectView();
  53. redirectView.setUrl(redirectUri);
  54. return redirectView;
  55. }
  56. // ((Test)) Redirect Destination
  57. @RequestMapping(value = "/api/oauth2/redirect", method = RequestMethod.GET, produces = "application/json")
  58. public @ResponseBody String Token(@RequestParam(value = "grant_type", required = true) String grantType,
  59. @RequestParam(value = "code", required = false) String code,
  60. @RequestParam(value = "refresh_token", required = false) String refreshToken, HttpSession httpSession) {
  61. // Code유효성 검사
  62. // token 발급
  63. String newAccessToken = "ACCESSTOKEN"; // 생성해야 함.
  64. String newRefreshToken = "REFRESHTOKEN"; // 생성해야 함.
  65. String tokenType = "bearer";
  66. int expiresIn = 3600;
  67. String result = "{" + "access_toke:" + newAccessToken + ", refresh_token:" + newRefreshToken + ", token_type:"
  68. + tokenType + ", expires_in:" + expiresIn + "}";
  69. return result;
  70. }
  71. }