2022. 4. 5. 16:28ㆍCloud Native
- 목차
Open Authorization 2.0
인증을 위한 개방형 표준 프로토콜
3rd party 프로그램에서 resource 소유자를 "대신" 하여 접근 권한을 위임
구글, 카카오, 네이버 등에서 OAuth2 기반의 인증 기능을 제공
기본 용어
Authentication (인증) | 접근 권한 자격 검증 과정 |
Authorization (인가) | 권한 부여 과정 |
Access Token | 리소스 서버의 자원 획득 시 사용하는 token (만료 기간 존재) |
Refresh Token | Access Token 만료 시 이를 갱신할 때 사용하는 token 즉, refresh token의 만료 기간이 access token 보다 길게 설정됨 |
역할
Resource Owner (User) | 리소스 소유자 자원 접근 권한 부여자 client에 대한 인증 수행 후 Authorization Grant(인증 획득 자격)을 부여 개념적으로는 리소스 소유자가 자격을 부여하나 실제로 OAuth2에서는 권한 서버가 중간에서 client와 리소스 소유자 간 중개 역할을 수행 |
Client | 자원 접근 요청자 |
Resource server | 자원 제공자 |
Authorization Server | 인증/인가를 수행 후 client에게 access token 발급(권한 부여) |
과정
1. Authorization Code Grant (권한 부여 승인 코드 방식)
기본 방식으로 client app이 사용자를 대신해 자원에 접근 요청 시 사용됨
refresh token 사용 가능
- 사용자(resource owner)가 client app을 실행
- client app은 Authorization server에 'authorization code grant(권한 부여 승인 코드)' 요청 <- (1) 코드 요청 (GET)
- 요청 params:
- response_type=code
- 요청 params:
- client app은 authorization server가 제공하는 log-in page를 browser를 사용해 출력
- 사용자는 이를 통해 log-in 수행
- authorization server가 client app에 "권한 승인 코드" 전달
- client는 redirect_url도 받음
- client app은 authorization server에 "access token" 요청 <- (2) Access Token 요청 (POST)
- 요청 params:
- client_id, client_secret, redirect_url
- grant_type=authorization_code
- code (authorization code는 access token으로 교환됨)
- 요청 params:
- authorization server는 client에 access token 전달
- client app은 access token을 가지고 resource server에 자원 요청
- resource server는 client에 자원 전달
authorize
GET 방식
request ex.
authorize?response_type=code&client_id=dh3r3j3445jk&state=dfhj&redirect_uri=https%2B%1A%2Esome...1
response ex.
https://some.com?code=Sjehkfuea44s&state=dfhj
client_id와 client_secret은 Base64 encoding하여 사용
request (access token)
POST 방식
request
Authorization: Basic dfhj121232fjdkjfzvzjhjdnzdikj34
Content-type: application/x-www-form-urlencoded
grant_type=authorization_code&code=Sjehkfuea44s&redirect_uri=https%2B%1A%2Esome...2
response
{
"access_token":"3aktnefaFEjr1zCsicaepAz",
"token_type":"some",
"expires_in":3600,
"refresh_token":"fgh1212fnzvxk3u9fzjhzkzQ",
"example_parameter":"some_value"
}
2. Implicit Grant (암묵적 승인)
자격증명을 안전히 저장할 수 없는 client에서 사용하는 방식
e.g., JavaScript 등의 코드로 동작하는 client
권한부여승인코드 없이 바로 "Access Token"이 발급됨
- 만료기간을 짧게 설정하여 누출의 위험을 줄여야 함
- refresh token 사용이 불가능
client_secret으로 client를 인증하지 않음
access token이 URL로 전달됨
- 사용자(resource owner)가 client (app)에 사용 요청
- client app은 authorization server에 접근권한 요청
- params:
- client_id, redirect_url
- reponse_type=token
- log-in page를 반환
- params:
- client는 log-in을 수행
- authorization server가 access token 제공
- client는 access token으로 자원 획득
authorize
GET 방식
request ex.
authorize?response_type=token&client_id=dh3r3j3445jk&state=dfhj&redirect_uri=https%2B%1A%2Esome...1
response ex.
https://some.com/cb#access_token=1Bsdu311hjfhkvadh&state=lkn&token_type=some&expires_in=3600
authorize 요청 시 바로 access token 전달
3. Resource Owner Password Credentials Grant (자원 소유자 자격증명 승인 방식)
uesrname, password로 Access Token을 전달 받음
client가 외부 프로그램인 경우 사용
refresh token 사용 가능
- user가 client에 사용 요청
- params: username, password
- client는 Authorization server에 "access token" 요청
- params: client_id, grant_type=password
- username
- password
- client는 access token을 전달받아 자원 획득에 사용
request (access token)
POST 방식
request
Authorization: Basic dfhj121232fjdkjfzvzjhjdnzdikj34
Content-type: application/x-www-form-urlencoded
grant_type=password&username=tommy&password=eyyerbz00a
response
{
"access_token":"3aktnefaFEjr1zCsicaepAz",
"token_type":"some",
"expires_in":3600,
"refresh_token":"fgh1212fnzvxk3u9fzjhzkzQ",
"example_parameter":"some_value"
}
4. client Credentials Grant (클라이언트 자격증명 승인 방식)
User 개입 없이 client의 자격증명만으로 Access Token을 획득
client에 대한 제한된 resource 획득에 사용됨
자격 증명을 안전히 보관할 수 있는 client만 사용
refresh token 사용 불가
- client는 authorization server에 "access token" 요청
- params: grant_type=client_credentials
- client는 access token을 전달 받아 자원 사용에 활용
request (access token)
POST 방식
request
Authorization: Basic dfhj121232fjdkjfzvzjhjdnzdikj34
Content-type: application/x-www-form-urlencoded
grant_type=client_credentials
response
{
"access_token":"3aktnefaFEjr1zCsicaepAz",
"token_type":"some",
"expires_in":3600,
"example_parameter":"some_value"
}
refresh token이 없음
'Cloud Native' 카테고리의 다른 글
Open Telemetry (0) | 2022.10.07 |
---|---|
TPS (Transaction Per Second) (0) | 2022.10.07 |
REST API (0) | 2022.03.01 |
Kafka, RabbitMQ, GCP pub/sub (0) | 2022.02.27 |
Chat System (0) | 2022.02.27 |