oauth 생태계 용어
Resource owner
client
Resource Server
Resource Server의 데이터를 쓰기위해서 client를 Resource Server에 등록합니다.
client는 Resource Server로 부터 client ID, client secret을 발급 받는다. 그러면 client는 id, secret 정보를 잘 저장해둔다.
특히 둘 중에 secret 정보은 절대 노출 되면 안됨. 만약 노출되면 내 서비스는 끝나는 거임.
이제 시작
Resource Server에게 client(내 서비스)가 부탁을 해야한다. '내가 어떠 어떠한 정보를 사용하겠다고 허락받아주세요' 라고 부탁해야 한다. 그러면 Resource owner 바로 Resource Server에게 자동으로 접속.
그러면 Resource Server가 Resource owner 로그인시킨다. 그러고 나면 Resource Server가 Resource Owner에게 'client가 현재 당신의 구글(예를들어calender) 정보를 사용하려합니다. 동의하시겠습니까?' 라고 한다. 동의
이렇게 동의하고 나면Resource Server가 client에게 code를 줍니다. 이 code는 Resource Owner가 client에게 Resource Server가 정보를(예를들어calender list)제공하도록 승인했다.
조금 더 복잡한 것이 필요한데 client는 전에 저장하고 있었던 id, secret(이 두개는 client가 자기가 맞다라는 증명하는 값)과 code를 Resource Server가 이 3개의 값을 비교해서 지금 Resource Server 입장에서 지금 접속해서 권한을 달라고 조르고 있는 이 client가 resource owner가 승인한 그 client인지를 검증하는 것이다.
그럼 그 검증 결과 여기있는 id, secret, code이 3값이 모두 유효하다면 이 Resource Server는 client에게 access token을 발급한다.
그럼 client는 이 access token을 자신의 파일이나 데이터 베이스 같은 곳에 소중하게 잘 보관한다.
access token을 이용해서 client는 Resource Server에 접속해서 access token을 제출하면서 데이터(예를 들어 구글 calender list)를 요청하면 Resource Server는 이 access token을 보고 자기가 발급한 적 있는 토큰 값이면 데이터를 client에게 준다. 그럼 client는 받은 데이터를 가공해서 Resource owner에게 가치를 제공하게 된다.
SDK 보안의 이유로도 사용해야 한다.
google cloud console
구글 로그인 하고 들어가서
새 프로젝트 만들기
애플리케이션 이름만 적고 저장 누르기
클라이언트 보안 비밀번호는 절대로 노출되서는 안됨.
다운 받아서 프로젝트 폴더에 저장하기
이 파일안에는 우리가 인증받은 아이디와 패스워드가 저장되어있는 정보가 저장 되어있다.
이 testarue 프로젝트에서 구글의 모든 라이브러리를 전부 다 쓰는 게 아니라 내가 쓸 것만 딱 켜놔야 한다. 혹시나 여기있는 정보가 노출됐을 때 만약에 여기있는 모든 서비스가 활성화 되어있으면 훨씬 더 위험함.
라이브러리로 감
로그인 서비스를 찾기.
'Spring Boot' 카테고리의 다른 글
@ControllerAdvice 예외 처리해주는 어노테이션 (0) | 2020.08.02 |
---|---|
Google JavaScript SDK, Fetherated Identity (0) | 2020.08.01 |
스프링 시큐리티 롤 권한 가져오기 (0) | 2020.07.31 |
Spring Boot - Security (0) | 2020.07.31 |
게시글 보기, 상세글 보기, 수정, 삭제 버튼(권한 있어야함. 없으면 Exception 던짐) (0) | 2020.07.27 |