OAuth

sally·2022년 6월 12일
0

Oauth - rfc6749

Oauth 인증방법 중 grant-types 번역 내용입니다.

Roles

resource owner

  • end-user (최종 사용자)
  • 보호되는 리소스로의 접근이 허용되는 엔티티

resource server

  • 액세스 토큰을 이용한 보호 되는 자원 요청을 수락하고 응답하여 호스팅하는 서버

client

  • 어떤 특성을 의미하는게 아니라, 자원 소유자의 지지와 자원 사용 허가를 받는 요청으로 보호된 자원을 만드는 애플리케이션

authorization server

  • 자원 소유자임을 성공적으로 인증하고 권한을 받아 클라이언트에게 액세스 토큰을 발행하는 서버

grant-type

grant-type : 애플리케이션이 access token 얻는 방식

The Authorization Code Flow

  • user를 OAuth 서버로 보내기 위해 application은 browser를 보여준다.
  • user는 인증 창을 보고, 앱의 요청을 승인한다
  • user는 쿼리 스트링 안에 인증 코드를 가지고 애플리케이션으로 되돌아간다.(리다이렉트)
  • 애플리케이션은 인증코드를 access token으로 교환한다.

Get the User’s Permission

OAuth는 사용자에게 애플리케이션으로의 제한된 접근시킬 수 있다.

애플리케이션은 처음에 OAuth로 요청할 허락이 필요하기 때문에, 사용자를 브라우저로 보낸다.

authorization flow를 시작하기 위해서, 애플리케이션은 URL을 구성하고, URL의 브라우저를 보여준다.

https://authorization-server.com/auth
 ?response_type=code
 &client_id=29352915982374239857
 &redirect_uri=https%3A%2F%2Fexample-app.com%2Fcallback
 &scope=create+delete
 &state=xcoiv98y2kd22vusuye3kch
  • response_type : 애플리케이션이 authorization code flow를 초기화하는 authorization server

  • client_id : 애플리케이션을 위한 공개된 식별자 (개발자가 처음 애플리케이션을 등록할 때 얻은)

  • redirect_uri : 요청을 승인한 이후 user를 돌려보낼 authorization server

  • scope : 애플리케이션이 요청하는 허용을 암시하는 1개 이상의 구분되는 문자열

  • state : 애플리케이션이 요청을 포함하여 만든 무작위 문자열로, user가 app 에 권한을 부여한 후 동일한 값이 반환되는 지 확인

    • CSRF 공격 예방위해 사용

Redirect Back to the Application

user가 요청을 승인하면,
authorization server 는 브라우저를 redirect_uri(code, state가 추가된)로 돌려보낸다.

https://example-app.com/redirect
 ?code=g0ZGZmNjVmOWIjNTk2NTk4ZTYyZGI3
 &state=xcoiv98y2kd22vusuye3kch
  • code : authorization server가 만든 인증 코드(1~10분 정도 짧게 이용)

Exchange the Authorization Code for an Access Token

인증토큰 ➜ 접근 토큰

애플리케이션이 인증코드를 가진 상태로 접근 토큰을 얻는데 사용한다.

애플리케이션이 다음의 파라미터들과 함께 POST 요청한다.

  • grant_type=authorization_code
    • 애플리케이션이 인증코드 grant type으로 사용하는 토큰 endpoint
    • 만료 안된
  • code
  • redirect로부터 받은 인증 코드 포함
  • redirect_uri
    • 요청시와 같은 uri (제외되기도 한다)
  • client_id
    • 애플리케이션의 clinet ID
  • client_secret
    • 애플리케이션의 client secret
    • 요청이 오직 애플리케이션에 의해 만들어진 접근 토큰을얻기 위함임을 보증

access token 생성후 반환되는 응답

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
  "access_token":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3",
  "token_type":"bearer",
  "expires_in":3600,
  "refresh_token":"IwOGYzYTlmM2YxOTQ5MGE3YmNmMDFkNTVk",
  "scope":"create delete"
}
  • 이제부터 애플리케이션이 접근토큰을 API 요청에 사용할 수 있다.

When to use the Authorization Code Flow

  • 모마일 앱 등클라이언트 비밀을 저장할 수 없다면 PKCE extension을 사용

  • 뒷단에서 애플리켕션과 OAuth 서버를 통해서 액세스 토큰이 보내지기 때문에, 코드 교환 과정은 공격자가 액세스 토큰을 가로채지 못함을 보장한다.


reference

profile
sally의 법칙을 따르는 bug Duck

0개의 댓글