OAuth 에 대하여(3)

김하은·2022년 12월 10일
1

Project-Study

목록 보기
3/7
post-thumbnail

등록 과정을 끝내면 인증 과정을 거친다. 등록을 하게 되면
Resourse Server 와 Client 양쪽은
Client Id
Client Secret
redirect URL 의 핵심적인 3가지 정보를 알게 된다.


만약 Resourse Server 가 A,B,C,D, 인 4개의 기능을 갖고 있다.
그렇다면, 이중에 Clent 가 Resourse Server 기능의 모든것이 필요한게 아닌 ,
B,C 에 해당되는 두개의 기능만 필요 하다 하면
모든 기능에 대해 인증을 받는것이 아닌, 해당 기능에 대해서만 인증을 받으면 된다.


Resourse Owner(user) 는 우리의 애플리케이션에 접속을 하려고 할때
Resourse Server 를 사용해야 하는 상황이 온다.
ex)
글을쓰거나 , 일정을 등록해야 하거나 이런 작업을 할때
Client 는 Resourse Owner 에게 아래와 같은 화면(로그인을 요청하는 화면 )을 보여주거나 , 하려고 하는 작업에 대해 인증 을 거쳐야 한다는 메세지를 보여준다.

"--으로 로그인 하기"의 버튼을 누르면 인증을 거친다는 부분에 대해 동의를 하고 진행 한다는 뜻이다.
버튼은 사진과 같이 , 링크로 이루어져 있다.

🚩Client id 값 => ?client_id = 1
🚩사용하고자 하는 기능 => &scope = B, C
🚩url의 값 => &redirect_url = https:// ---

이 3가지의 정보를 주소로 나타내어 링크로 제공해주면 된다.

조금더 알아보자면 ex)
구글 사이트에서 로그인 하기의 의 주소를 복사 하고
URLDECODE.ORG 라는 사이트에 붙여넣어 Decode 라는 버튼을 눌러보면
기존 주소해서 조금더 우리가 보기 편한 주소로 바꿔주는데 이와 같이 로그인의 버튼은 링크로 이뤄져 있는 모습을 볼수 있다.

Encode 되었을때

Decode 되었을때 ( 조금더 보기 편하게 주소를 바꿔준다.)


Resource Owner 가 Resource Server에 이 주소로 서버 접속을 하게 되면
Resource Server 에서 현재 Owner가 로그인/비로그인 대해 판단하여
되어있지 않으면 로그인 하라는 알림창을 띄어준다.

그리고 Resource Owner 가 로그인 성공시, Resource Server는
client 의 client id 값과 같은 id 값이 있는지 확인,
접속을 시도 하는 외부 url 의 주소가 자신이 가지고 있는 주소값이랑 같은지 확인후 다르면 작업을 끝내고 같다면,
오너에게 scope에 해당되는 권한을 cliet 에게 부여 할것인지 확인하는 메세지를 전송
ex)
어떠한 것을 어떤 클라이언트가 요청하고 있는데 허용할것인지

만약 Resource Owner(user) 가 허용하면 그 정보가 Resource Server 로 전달되고 Resource Server 는

ex)
user id 1: , scope: b,c
해당 유저 id 는 b,c 에 대한 기능을 허용 하는 것에 동의 하였다는 정보를 저장한다.

이렇게 사용자 로부터 resource server 에 접속하는것에 대해 동의를 구하는 과정을 알아 보았다.


이제,

Resource Owner 에게 승인을 받았으니 resource server 가 승인을 하기 위해
사용하는 임시 비밀번호 "authorization code" . 이 비밀번호를 Resource Owner 에

이런식으로 보낸다

📍(응답할때 HEADER 라고 하는 값으로 Location 이라고 하는 값을 주는것 (Redirection 이라고도 함))
📍 의미하는 바는
server -> Owner 의 웹브라우저 에게 https://client/callback?code=3 이라는 주소로 이동 하라고 명령

😮 여기서 ?code=3 이라고 하는 값이 임시 비밀번호인 authorization code: 3 과 같은것
그러면
Resource Owner 의 웹 브라우저는 Location Header 값에 의해서 Resource Owner의 사용자가 인식하지 않게 이 주소로 이동을 하게 된다. 주소에 있는 code=3 이라는 값에 의해서 client는 authorization code: 3 이라는 정보를 알게 된다.

client 는 Resource Owner를 통하지 않고 해당 주소를 가지고 resource server 에 직접 접속 하게 된다.
authorization code 와 client_secret 라고 하는 두개의 비밀정보를
결합해서 resource server 에게 전송한다.

resource server 는 자신이 가지고 있는
authorization code 와 client 가 전송한 정보를 비교해서 일치 하는지 확인후 client id, url, client_secret, authorization code 가 완벽히 일치하면

"access Token" 을 발급 하는것이다.

profile
꾸준함을 이기는것은 없다

0개의 댓글