본문 바로가기

TIL

TIL) 인증 중개 메커니즘: OAuth(feat. github을 사용한 Sprint review)

OAuth란?
인증을 중개하는 메커니즘
이미 사용자 정보를 갖고있는 웹 서비스에서 사용자의 인증을 대신해주고, 접근 권한에 대한 토큰을 발급한 후 이를 이용해 내 서버에서 인증이 가능해짐.

 

OAuth 인증의 흐름

앱 클라이언트에서 로그인 요청 -> 인증 서버에서 로그인하면 authorizationCode 발급 -> 해당 코드를 앱 서버에 전달 -> 앱 서버에서 해당 코드로 accessToken 발급 -> 발급된 토큰을 앱 서버는 클라이언트로 전달

*authorizationCode를 통해 앱 서버에서 로그인 id 등 유저 정보 함께 받아올 수 있음


OAuth 관련 용어
- resource owner: 액세스 중인 리소스의 유저
- client : 앱
- resource server: 클라이언트 요청 수락하고 응답할 수 있는 서버
- authorization server: resource server가 액세스 토큰을 발급하는 서버
- authorization grate: 클라이언트가 액세스 토큰을 얻을 때 사용하는 자격 증명
- authorization code: access token을 발급받기 위한 code
- access token: 보호된 리소스에 액세스하는 데 사용되는 credentials
- scope: 주어진 액세스 토큰을 사용하여 액세스할 수 있는 리소스의 범위 

 

OAuth 관련 Sprint review - github을 이용한 인증

// server callback 함수

await axios.post('https://github.com/login/oauth/access_token',
	{
     client_id: clientID,
     client_secret: clientSecret,
     code: req.body.authorizationCode
    },
    {
     headers:{
     	accept: 'application/json'
        }
    }
    )
    .then(result=>{
    	res.status(200).send({ accessToken: result.data.access_token })

앱 서버에서 인증 서버로 token 발급을 요청할 때는 형식이 있음.

github 같은 경우에는 client_id, client_secret, code 필요.

 

발급되는 토큰은 json 형태로 변환해야 하기 때문에 headers에 accept 문구 작성필요.

 

발급된 토큰을 클라이언트로 전달할 때 data에 accessToken으로 담아서 보냄.

 

클라이언트는 result.data.accessToken으로 접근.

 

 

Sprint 진행 과정에서 발견한 추가로 공부할 내용

  • 환경변수(process.env) 접근 범위
  • new URL
  • window.location
  • endpoint
  • get과 post 차이
  • https, http 서버 통신 방법차이
  • map 함수 return으로 <img> 받을 때 왜 자체 닫는 태그 안되는지