Oauth (Open Authorization)

OauthλŠ” 타사 μ„œλΉ„μŠ€ 간에 인증을 μ œκ³΅ν•˜λŠ” 것에 λŒ€ν•œ ν‘œμ€€ ν”„λ‘œν† μ½œμ΄λ‹€.
Open Authorization의 μΆ•μ•½μ–΄λ‹€.

μ‰¬μš΄ 예λ₯Ό λ“€μžλ©΄, λŒ€ν‘œμ μœΌλ‘œ SNS 둜그인 같은 μ™ΈλΆ€ 둜그인 ꡬ쑰가 Oauth ꡬ쑰λ₯Ό λ”°λ₯΄λŠ” μ‹œμŠ€ν…œ ν˜•νƒœ 쀑 ν•˜λ‚˜λ‹€.

Oauthκ°€ μƒκ²¨λ‚˜κ²Œ 된 λ°°κ²½, λ°œμ „μ‚¬μ™€ κ·Έ ꡬ쑰에 λŒ€ν•΄μ„œ κ°„λž΅ν•˜κ²Œ 닀뀄보겠닀.




Oauth의 λ“±μž₯ λ°°κ²½

μ˜ˆμ „μ—λŠ” μ„œλΉ„μŠ€ κ°„ 연동이 ν•„μš”ν•  경우 맀우 λ¬΄μ‹ν•˜κ³  κ³Όκ²©ν•œ λ°©λ²•μœΌλ‘œ 해결을 ν–ˆμ—ˆλ‹€.

예λ₯Ό λ“€μ–΄, λ‚΄κ°€ λ§Œλ“œλŠ” μ„œλΉ„μŠ€μ—μ„œ νŠΈμœ„ν„°μ˜ μ‚¬μš©μž 정보λ₯Ό κ°€μ Έμ˜¬ ν•„μš”κ°€ μžˆλ‹€κ³  κ°€μ •ν•΄λ³΄μž.
그럼 κ·Έλƒ₯ μ‚¬μš©μžμ—κ²Œ νŠΈμœ„ν„°μ˜ ID:Passwordλ₯Ό λ‚΄ μ„œλΉ„μŠ€μ— μž…λ ₯ν•˜λ„λ‘ ν•œ λ‹€μŒμ— κ·Έκ±Έ λ°›κ³  λ‘œκ·ΈμΈμ„ ν•΄μ„œ μ²˜λ¦¬ν•œ 것이닀.

λ‹Ήμ—°νžˆ 이 방식은 λ³΄μ•ˆμ μœΌλ‘œλ„, μ‚¬μš©μž νŽΈμ˜μ„± μˆ˜μ€€μ—μ„œλ„ 맀우 λ”μ°ν•œ 방법이닀.

이 방식에 λŒ€ν•œ 문제λ₯Ό μ‹¬κ°ν•˜κ²Œ μΈμ§€ν•œ μ‹œμ μ€, 2006λ…„, νŠΈμœ„ν„°μ˜€λ‹€.
Ma.gnoliaλΌλŠ” μ„œλΉ„μŠ€μ—μ„œ νŠΈμœ„ν„°μ˜ μ‚¬μš©μž 정보λ₯Ό μ—°λ™ν•΄μ„œ μžμ‚¬ μ„œλΉ„μŠ€μ— ν™œμš©ν•˜λ €κ³  ν–ˆλŠ”λ°, νŒ¨μŠ€μ›Œλ“œλ₯Ό λ°›μ•„μ„œ μ²˜λ¦¬ν•˜λŠ” μ’€ μ•„λ‹ˆλ‹€ μ‹Άμ–΄μ„œ ν‘œμ€€μ•ˆμ„ λ§Œλ“€μ–΄λ³΄μžλŠ” 이야기가 λ‚˜μ˜¨ 것이닀.

κ·Έλ ‡κ²Œ ν•΄μ„œ νŠΈμœ„ν„°μ˜ μ£Όλ„λ‘œ λ‚˜μ˜¨ 것이 OAuthλΌλŠ” ν‘œμ€€ ν”„λ‘œν† μ½œμ΄λ‹€.




OAuth 핡심 원리

OAuth의 핡심 근간은 νŒ¨μŠ€μ›Œλ“œλ₯Ό λ…ΈμΆœν•˜μ§€ μ•Šμ€ μ±„λ‘œ 타사가 데이터에 μ ‘κ·Όν•΄μ•Ό ν•œλ‹€λŠ” 것이닀.

근데 λ„λŒ€μ²΄ μ–΄λ–»κ²Œ ν•˜λ©΄ 타사가 νŒ¨μŠ€μ›Œλ“œ 없이 μΈμ¦μ‹œμŠ€ν…œμ„ μ‚¬μš©ν•  수 μžˆμ„κΉŒ?
νŒ¨μŠ€μ›Œλ“œλ“  토큰이든, λ­”κ°€μ˜ 인증 μˆ˜λ‹¨μ„ 전달받지 λͺ»ν•œλ‹€λ©΄ μ‹ λ’° κ°€λŠ₯ν•œ ν˜•νƒœλ‘œ μ‹œμŠ€ν…œμ„ κ΅¬μ„±ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•œ 일이닀.

κ·Έλž˜μ„œ λ‚˜μ˜¨ 해결책은... κ·Έλƒ₯ μΆ”κ°€λ‘œ μž„μ‹œ νŒ¨μŠ€μ›Œλ“œλ₯Ό λ§Œλ“€μ–΄μ„œ 이런 μš©λ„λ‘œλ§Œ μ“Έ 수 있게 ν•˜μžλŠ” κ²ƒμ΄μ—ˆλ‹€.
κΈ°μ‘΄ νŒ¨μŠ€μ›Œλ“œμ— λΉ„ν•΄μ„œ 수λͺ…이 μ§§κ³ , μΌνšŒμ„±μ΄κ³ , μ ‘κ·Ό λ²”μœ„ 등을 μ œν•œν•  수 μžˆλ‹€λŠ”κ²Œ λ‹€λ₯Ό 뿐이닀.

OAuth flowλŠ” λŒ€λž΅ λ‹€μŒκ³Ό 같은 ꡬ쑰둜 κ΅¬ν˜„λœλ‹€.

λ¨Όμ € μ΅œμ’… μœ μ €μ—κ²Œ νŠΈμœ„ν„° λ‘œκ·ΈμΈμ°½μ„ λ„μš°κ³ , μ‚¬μš©μž 정보λ₯Ό λ„˜κΈΈ 수 μžˆλ‹€λŠ” 것도 λ™μ˜λ₯Ό λ°›λŠ”λ‹€.


λ™μ˜κ°€ μ™„λ£Œλ˜λ©΄,


νŠΈμœ„ν„°κ°€ 연동을 μœ„ν•œ μΌμ’…μ˜ "μž„μ‹œ 토큰"을 λ°œκΈ‰ν•΄μ€€λ‹€.
이 μž„μ‹œ ν† ν°μ˜ 곡식 μš©μ–΄λŠ” 인가 μ½”λ“œ(authorization code)λ‹€.

이 μž„μ‹œ 토큰은 λŒ€μ²΄λ‘œ ν•œλ²ˆ μ“°λ©΄ μ¦‰μ‹œ 만료되며, μ“°μ§€ μ•Šλ”λΌλ„ λͺ‡λΆ„ 정도면 만료되게 λ§Œλ“€μ–΄μ Έμžˆλ‹€.

그러면 타사 μ„œλΉ„μŠ€λŠ” 인가 μ½”λ“œλ₯Ό κ°€μ Έλ‹€κ°€ λ‹€μ‹œ μ œλŒ€λ‘œ μ“Έ 수 μžˆλŠ” "μ•‘μ„ΈμŠ€ 토큰"을 λ°œκΈ‰λ°›λŠ”λ‹€.
이 "μ•‘μ„ΈμŠ€ 토큰"이 μžˆλ‹€λ©΄ 이제 타사 μ„œλΉ„μŠ€λŠ” 이걸 κ°€μ Έλ‹€κ°€ μ‚¬μš©μžμ˜ 정보λ₯Ό μ‘°νšŒν•  수 μžˆλ‹€.

이λ₯Ό ν†΅ν•΄μ„œ μ‚¬μš©μžμ˜ 영ꡬ νŒ¨μŠ€μ›Œλ“œλ₯Ό λ°›μ§€ μ•Šκ³ λ„, 비ꡐ적 μœ μ—°ν•˜κ³  μ•ˆμ „ν•œ ν˜•νƒœλ‘œ μ‚¬μš©μž 정보에 μ ‘κ·Όν•  수 μžˆλŠ” 것이닀.

ν•˜λ‚˜λ‘œ μ •λ¦¬λœ κ·Έλ¦Ό

참고둜 μ•‘μ„ΈμŠ€ν† ν°μœΌλ‘œ μ‚¬μš©μž 정보λ₯Ό μ‘°νšŒν•˜λŠ” 것은 OAuth λͺ…μ„Έμ—λŠ” ν¬ν•¨λ˜μ§€ μ•ŠλŠ”λ‹€.
그건 OpenID의 μ˜μ—­μ΄λ‹€.




토큰과 만료

이 λ³΄μ•ˆ μ‹œμŠ€ν…œμ˜ 핡심은 λ§Œλ£Œλ‹€.
토큰(νŒ¨μŠ€μ›Œλ“œ)κ°€ μœ μΆœλ˜λ”λΌλ„ 수λͺ…이 μ‘΄μž¬ν•œλ‹€λ©΄ μ•…μš©μ„ λ‹Ήν•  κ°€λŠ₯성이 ν˜„μ €νžˆ 쀄어듀기 λ•Œλ¬Έμ΄λ‹€.

OAuthμ—λŠ” 수λͺ…이 λ‹€λ₯Έ 총 3κ°€μ§€μ˜ 토큰이 μ‘΄μž¬ν•œλ‹€. 이 계측화λ₯Ό ν†΅ν•΄μ„œ 곡격 κ°€λŠ₯ν•œ 지점을 μ΅œμ†Œν™”ν•˜λŠ” 것이닀.

1. authorization code
authorization codeλŠ” μœ„μ—μ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄, 졜초 연동에 μ‚¬μš©λ˜λŠ” μž„μ‹œ 연동 토큰이닀.
보톡 λ¦¬λ””λ ‰μ…˜μ„ ν†΅ν•΄μ„œ 타사 μ„œλΉ„μŠ€μ— μ „λ‹¬ν•˜κ³€ ν•œλ‹€.
λŒ€μ²΄λ‘œ 5λΆ„-10λΆ„ μ •λ„μ˜ 짧은 수λͺ…을 κ°€μ§€λŠ” 것이 νŠΉμ§•μ΄λ©°, ν•œλ²ˆ μ‚¬μš©ν•˜λ©΄ μ¦‰μ‹œ λ§Œλ£Œλ˜μ–΄μ•Ό ν•œλ‹€.

**2. access token **
이것도 μž„μ‹œ νŒ¨μŠ€μ›Œλ“œμ˜ 일쒅이닀. 이게 있으면 타사 μ„œλΉ„μŠ€λŠ” API에 토큰을 λ‹΄κ³  μ‚¬μš©ν•΄μ„œ ν•΄λ‹Ή User의 정보λ₯Ό μ‘°νšŒν•  수 μžˆλ‹€.
이건 수λͺ…을 κ°€μ Έμ•Ό ν•˜λ©°, 수λͺ…이 λ‹€ν• λ•ŒκΉŒμ§€λŠ” 반볡적으둜 μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.
수λͺ…은 λ”± μ •ν•΄μ Έμžˆμ§„ μ•Šμ€λ°, λŒ€μ²΄λ‘œ ν•œμ‹œκ°„ 정도가 μΌλ°˜μ μ΄λ‹€.

그러면 access token이 만료되면 μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ?
κ·Έλ•Œλ§ˆλ‹€ μ‚¬μš©μžμ—κ²Œμ„œ μƒˆλ‘œ 인가 μ½”λ“œλ₯Ό λ°›λŠ” 것도 방법이긴 ν•œλ°, κ·Έκ±Έλ‘œλŠ” ν•œκ³„κ°€ μžˆλ‹€. κ·ΈλŸ΄λ•Œ ν•„μš”ν•œ 것이 refresh token이닀.

3. refresh token (optional)
refresh token은 access token을 λ°œκΈ‰ν•  수 μžˆλŠ” μƒμœ„ κ°œλ…μ˜ νŒ¨μŠ€μ›Œλ“œλ‹€.
access token보닀 수λͺ…이 κΈΈλ©°, 보톡 ν•œλ‹¬μ—μ„œ 1λ…„ 정도λ₯Ό 만료 κΈ°ν•œμœΌλ‘œ μž‘λŠ”λ‹€.
refresh token의 수λͺ…을 늘리게 ν• μ§€λŠ” 선택이닀.
참고둜 이건 OAuth의 ν•„μˆ˜ μŠ€νŽ™μ€ μ•„λ‹ˆλ‹€. μ—†λŠ” 것듀도 μžˆλ‹€.




Oauth 1 (2007)

Oauth 1은 2007년에 λ§Œλ“€μ–΄μ§„ 졜초 버전이닀. ν˜„μž¬λŠ” λ³΄μ•ˆ 취약점이 λ‹€μ–‘ν•˜κ²Œ 많이 μ§€μ λΌμ„œ 폐기된 μƒνƒœλ‹€.
ν˜„ μ‹œμ μ—μ„œ Oauth 1λ₯Ό μ§€μ›ν•˜λŠ” providerλŠ” 사싀상 μ—†λ‹€.

문제




Oauth 2 (2012)

κ·Έλž˜μ„œ μš°μ—¬κ³‘μ ˆ 끝에 OAuth 2λ₯Ό λ‹€μ‹œ λ§Œλ“€μ—ˆλ‹€.
ν˜„ μ‹œμ μ—μ„œλŠ” μ™„μ—°ν•œ ν‘œμ€€μ΄κ³ , λŒ€λΆ€λΆ„μ˜ provider듀은 OAuth 2 ν‘œμ€€μ— λ§žμΆ°μ„œ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜κ³  μžˆλ‹€.

κ°œμ„ 




OpenID Connect

ν˜„ μ‹œμ μ—μ„œλŠ” OAuth2 λ‹¨λ…μœΌλ‘œ μ‚¬μš©ν•˜μ§€λŠ” μ•Šκ³ , ID Token κ°œλ…μ„ λ§λŒ„ OIDCλΌλŠ” 섀계 ꡬ쑰λ₯Ό λŒ€λΆ€λΆ„ μ±„νƒν•œλ‹€. ν¬ν•¨κ΄€κ³„λΌμ„œ λ‹¬λΌμ§ˆκ±΄ λ³„λ‘œ μ—†κΈ΄ ν•˜λ‹€.

μƒμ„Έν•œ λ‚΄μš©μ€ 별도 포슀트λ₯Ό μ°Έμ‘°ν•œλ‹€.
https://blog.naver.com/sssang97/224084290003



μ°Έμ‘°
https://oauth.net/2/
https://www.upguard.com/blog/oauth