Bcrypt를 써먹기 위해서, 스프링 시큐리티 dependencies를 추가하였습니다.

 

 이렇게 추가하고, 프로젝트 껍데기 zip 파일을 다운로드를 받아 봅시다.

 


 controller하고 application.properties만 조금 바꿔 보겠습니다.

 

 

 server.port는 7780으로 바꿉니다.

 

 

 그리고, GET /를 받는 test 메소드를 작성했습니다. 별 다른 것은 없고요. 9번째 줄에서, "abcde"를 BCryptPasswordEncoder로 암호화 시킵니다. 다음에, 10번째 줄에서, encoder.matches로 get 파라미터로 날라온 pw와 encrypted_pw가 같은지 비교하게 됩니다.

 

 만약에, 이 두 결과가 같다면 accept를 리턴하고, 아니라면 wrong을 리턴합니다. API는 매우 간단합니다. 사실, pw를 get 파라미터로 보내지는 않아요. 이건 SSL을 적용하면서 다시 이야기 해 보도록 합시다.

 

 

 이제 postman으로 보내 봅시다. 보내 봤더니, 401 Unauthorized를 뱉는데요. 이는 인증받지 않았다는 것입니다. 이 글에서도 살짝 다룬 적이 있었습니다. 403하고 헷갈리기 쉬울 수도 있는데요. 403은 인가받지 않았다는 의미입니다. 허가할 때 그 허가입니다. 뜬금없이 401이 떴으니, 뭐가 뭔지 잘 모르겠네요. 로그를 봅시다. 

 

 그랬더니 security password가 나옵니다. 이것은 중요한 것이니, 복사해 봅시다.

 

 스프링 시큐리티 서비스를 돌리고 있는 서버주소:7780을 사이트에 입력해 보면, 이런 로그인 창이 뜹니다. 옆에 ! 안전하지 않음이 있는데요. user에 user, 패스워드에 아까 복사한 것을 복사 붙여넣기 하고 Sign in을 눌러 보겠습니다.

 

 

 그러면 접속은 되는 걸 볼 수 있습니다. 단지, 해당 주소가 mapping이 되지 않아서 그럴 뿐. 이제 postman으로 어떻게 요청을 하는지 봅시다.

 


 이 인증 정보를 postman으로 보내야 합니다. 어떻게 보내면 좋을까요? Authorization 탭을 보겠습니다.

 

 여러가지 탭이 있는데요. 이 중에서 Basic Auth을 선택하겠습니다.

 

 

 Username에는 user를 Password에는 실행시킬 때 나온 security password를 칩니다. auth 정보를 넘겨줍니다.

 

 

 다음에 get 파라미터로 pw를 abcde로 받기로 하였습니다. 그러니 Query params에 pw를 abcde로 넘깁니다.

 

 

 abcde를 encrypt 한 거랑 이미 abcde가 encrypt가 된 것이 같으므로, accept를 띄우게 됩니다.

 

 

 그런데, 계속 보내 보면, 리턴되는 스트링이 계속 달라짐을 알 수 있어요. 이는, salt가 랜덤하게 바뀌었기 때문입니다. salt가 랜덤하게 바뀌면 어떻게 encrypted가 된 abcde랑 abcde를 암호화 한 것을 비교하냐고 물어보실 수도 있습니다. salt와 얼만큼 돌렸는지에 대한 정보는 문자열 내에 있으니, 가능합니다.

 

 이에 대한 것은 다음에 다시 언급해 보겠습니다.

 

 반대로 abdf를 보내면 wrong이 뜨는데요. 이는 암호화된 값이 abcde가 암호화된 값과 다르기 때문입니다. 이번 시간에는 스프링 시큐리티에서 인증 정보가 필요할 때, 인증 정보를 포함한 요청을 어떻게 보내는지, 그리고 간단하게 bcrypt에 대해서 알아보았어요. 다음에 계속 이어서 해 보겠습니다.