์ธ๊ฐ ์ฝ๋๊ฐ ํ์ํ์ง ์์ api์ ์ ๊ทผ์ ์ ์์ ์ผ๋ก ๊ฐ๋ฅํ ์ํ์
๋๋ค.
๊ทธ๋ฌ๋ ์ฌ์ฉ์ ์ ๋ณด๊ฐ ํ์ํด ์ธ๊ฐ ์ฝ๋๋ฅผ ๋ฐ์์์ผ ํ๋ ๋ชจ๋ api๋ ์ ๊ทผ ๋ถ๊ฐ์ธ ์ํ์ ๋๋ค๐
์น๋ธ๋ผ์ฐ์ ์ ๊ทผ ์ 500 Error
๋ฐ์
์นด์นด์ค ์์
๋ก๊ทธ์ธ์ด ์ ๋๋ก ์๋๋์ง ์๋ ๊ฒ -> jwtfilter๋ฅผ ํต๊ณผํ์ง ๋ชปํ๋ ๋ฌธ์
๋ก ์ ์ด๋ ๊ฒ์ผ๋ก ํ์
ํ๊ณ ์์ต๋๋ค.
AWS ec2 ์๋ฒ
๋ด ์๋ฌ(์นด์นด์ค ์์
๋ก๊ทธ์ธ ์๋ ์)
KOE๋?
- kakao ์ธก์์ ๊ฐ๋ฐ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ์๋ฌ ๋ก๊ทธ์ ํค๋ ํ์
- ๋ค์ ๋ถ๋ ๋ฒํธ์ ๋ฐ๋ผ ์๋ฌ ์์ธ์ ํ์ธํ ์ ์๋ ํํ
- kakao develops ๊ณต์ ์ฌ์ดํธ์์ ๋ฌธ์ ํด๊ฒฐ์ ๊ดํ ์๋ฃ๋ฅผ ์ฌ๋ ค๋์์ผ๋ ํด๋น ์๋ฃ๋ฅผ ์ฐธ๊ณ ํด ์๋ฌ์ ์์ธ์ ํ์ ํ๋ฉด ๋ฉ๋๋ค!
๐ Kakao Delelopers/trouble-shooting
1๏ธโฃ ํ์ฌ ํ๋ก์ ํธ์์ ์ฌ์ฉ์ค์ธ redirect URI ์ค์ ์ ๋ชจ๋ ec2 ์๋ฒ์ ํด๋นํ๋ IP์ ํฌํธ๋ฒํธ๋ก ๋ณ๊ฒฝํ๋ ์์ ์ ์งํํ์ต๋๋ค.
localhost:8080
โก๏ธ3.34.236.224:3000
๐ application.yml ์ผ๋ถ
security:
oauth2:
client:
registration:
kakao:
client-id: {RestapiKey ๊ฐ์ ์์ฑ}
client-secret: {์นด์นด์ค ๋๋ฒจ๋กํผ์์ ๋ฐ๊ธ}
client-name: Kakao
redirect-uri: http://3.34.236.224:3000/oauth/kakao/login
scope: profile_nickname, profile_image, account_email
authorization-grant-type: authorization_code
client-authentication-method: POST
provider:
kakao:
authorization_uri: https://kauth.kakao.com/oauth/authorize
token_uri: https://kauth.kakao.com/oauth/token
user-info-uri: https://kapi.kakao.com/v2/user/me
user_name_attribute: id
๐ OauthController ์ผ๋ถ
@GetMapping("/kakao/login")
public void redirectToKakaoLogin(HttpServletResponse response) throws IOException {
response.sendRedirect("https://kauth.kakao.com/oauth/authorize?client_id=[์ค์ restapikey ๊ฐ์ ๊ทธ๋๋ก ๋ฃ์ด์ค]&redirect_uri=http://3.34.236.224:3000/oauth/kakao/login&response_type=code");
}
//์นด์นด์ค ์์
๋ก๊ทธ์ธ ๊ตฌํ
@GetMapping("/oauth/kakao/login")
public void kakaoLogin(@RequestParam("code") String authCode, HttpServletResponse response)
throws IOException {
LoginResultDto loginResult = kakaoLoginService.handleKakaoLogin(authCode);
boolean isNewUser = loginResult.isNewUser();
Cookie authorization = new Cookie("Authorization", loginResult.getToken());
authorization.setSecure(true);
authorization.setHttpOnly(true);
authorization.setPath("/");
authorization.setMaxAge(3600);
response.addCookie(authorization);
String redirectUrl = "/api/v1/parking/read/detail/1";
response.sendRedirect(redirectUrl);
}
2๏ธโฃ Kakao Devtalk ์ฌ์ดํธ์ KOE303 ์๋ฌ ์ง๋ฌธ
ํ์ง๋ง ํ์ฌ ๋ฐฐํฌ๋ ํ๋ก์ ํธ์์์ ์ฝ๋ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ผ๋ก ํ๋จํ์ฌ, ์น๋ธ๋ผ์ฐ์ ์์ ํ์ธ ๊ฐ๋ฅํ ์๋ฌ๋ฅผ ์ฒจ๋ถํด ๋ค์ ์ง๋ฌธ์ ์ฌ๋ ธ์ต๋๋ค.
-> ๋ณ๊ฒฝ์ ํ์์๋ ์ฌ์ ํ kakao ์ธก์์๋ ๋ฆฌ๋ค์ด๋ ํ
URI๊ฐ ์ผ์นํ์ง ์๋ ๊ฒ์ผ๋ก ๋ณด์ฌ ๋ ์์ธํ ์ง๋ฌธ์ ์ฌ๋ฆฐ ๋ค, ์ฐ์ ํ๋ก์ ํธ ์ฝ๋๋ฅผ ๋ค์ ๋ถ์ํด๋ณด๊ธฐ๋ก ํ์ต๋๋ค.
๋ค์ํ๋ฒ ๋ถ์ํด๋ณด๋, ํ์ฌ ์นด์นด์ค ๋ก๊ทธ์ธ์ ์ธ๊ฐ ์ฝ๋๊น์ง๋ ๋ฐ๊ธ์ด ๋์ง๋ง, jwtfilter๊น์ง ๋๋ฌํ์ง ๋ชปํ๋ฉฐ 500 ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ ๊ฐ์ ์ฝ๋์ ๋ํ ์ง๋ฌธ์ ๋๋ ธ์ต๋๋ค.
์ฝ๋ ์์ ํฐ ๋ฌธ์ ๋ ์๋ค๋ ๋ต๋ณ์ ๋ฐ์๊ณ , ๋ฐฐํฌ์ ๋ํด์ ์ธ๊ธํด์ฃผ์ จ๋๋ฐ ์ด ๋ถ๋ถ์์ Github Actions๋ฅผ ๋ค์ ์ดํด๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ ์ ์์์ด์!
deploy.yml > Make application.yml ๋ถ๋ถ
- name: Make application.yml
run: |
cd ./src/main/resources
touch ./application.yml
echo "${{ secrets.PROPERTIES }}" > ./application.yml
shell: bash
์ง๊ธ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ดํด๋ณด๋ฉด, Github Actions์ ์ํฌํ๋ก์ฐ ์คํ ์ Github Secrets์ ์ ์ฅ๋ PROPERTIES๋ฅผ ๋ณต์ฌํด์ ๊ฐ์ ธ์ค๋ ํํ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ํ์ฌ์ application.yml์ ๋ด์ฉ์ด ๊ทธ๋๋ก ๋ณต์ฌ๋์ด ์์ด์ผ๋ง ์ ์ฉ์ด ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ, ํ์ฌ PROPERTIES ๋ด๋ถ์ ์ค์ ๋ด์ฉ ์ค redirect uri ์ค์ ๋ถ๋ถ์์ localhost:8080์ผ๋ก ์ค์ ํ๋ ์์ ๋ด์ฉ๋ง์ด ๋ฐ์๋์ด ์์ ์ ์๋ค๊ณ ์๊ฐํ์ด์๐ฎ
github repo > Settings > Security > Actions
์์ ์ ์ฅํ PROPERTIES ๊ฐ์ ํ์ฌ์ application.yml ๋ด์ฉ์ผ๋ก ์์ ํด์ค์ผ ๋ฐฐํฌ๋ ํ๋ก์ ํธ์ ๋ฐ์์ด ๋๋ ๊ฒ์ด ์๋๊ฐ ์๊ฐํ๊ณ ์์ด์...!JWT String argument cannot be null or empty.
์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.authorization.setSecure(false);
๋ก ํ์ต๋๋ค.!๊ฒฐ๋ก
- KOE303 ์๋ฌ๋ ๋ฐฐํฌ ์์ ๋ฌธ์ ์ผ ์๋ ์๋ค.
- ๋๋ถ๋ถ์ ์๋ฌ๋ ์คํ ๋๋ ์ ๊ทผ ๊ถํ ์ค์ ์ ๋ฐ๋ฅธ ๋ฌธ์ ๋ก ๋ฐ์ํ๋ค.