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> 받을 때 왜 자체 닫는 태그 안되는지