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> 받을 때 왜 자체 닫는 태그 안되는지
'TIL' 카테고리의 다른 글
TIL) React state, prop 사용(feat. memo, propTypes, css-module) (1) | 2022.06.12 |
---|---|
TIL) 독립적 앱 실행환경 제공하는 Docker (0) | 2022.06.10 |
TIL) http 통신 라이브러리: Axios (0) | 2022.06.08 |
TIL) 토큰기반 인증 : JWT (0) | 2022.06.08 |
TIL) res.status (0) | 2022.06.07 |