스프링 시큐리티 OAuth2/OAuth 2.0 권한부여 유형

OAuth 2.0 Grant Type 개요

webmaster 2023. 1. 8. 15:00
728x90

권한 부여 유형

  • 권한부여란 클라이언트가 사용자를 대신해서 사용자의 승인하에 인가서버로부터 권한을 부여받는 것을 의미한다
  • OAuth 2.0 메커니즘은 아래와 같은 권한 부여 유형들을 지원하고 있으며 일부는 Depreacted 되었다

Authorization Code Grant Type

Authorization Code Grant Type

  • 권한 코드 부여 타입, 서버 사이드 애플리케이션(웹( 애플리케이션),), 보안에 가장 안전한 유형
  • 인증을 완료 후, 코드를 발급받은 뒤(role1) 이를 매개변수로 토큰을 생성할 매개변수로 전달하는 방식이다.

Implicit Grant Type (Deprecated)

Implicit Grant Type

  • 암시적 부여 타입, 공개 클라이언트 어플리케이션 (SPA 기반 자바스크립트 앱, 모바일 앱), 보안에 취약
  • 스크립트 자체가 노출이 될 수 있으며, 전달받은 AccessToken 또한 브라우저에 노출이 된다.
  • 인가 서버에 따라 해당 정책을 지원 할 수도 안 할 수도 있다.

Resource Owner Password Credentials Grant Type (Deprecated)

  • 리소스 사용자 비밀번호 자격증명 부여 타입, 서버 어플리케이션, 보안에 취약
  • User가 서버에게 id/password를 전달하고, 전달받은 id/password를 인증 서버에 네트워크를 통해 인증을 시도한다,
  • User의 id/Paswword의 네트워크에 노출되고, 서버가 user의 id/password를 알 수 있다.

Client Credentials Grant Type

  • 클라이언트 자격 증명 권한 부여 타입, UI or 화면이 없는 서버 애플리케이션
  • Client의 id, secret만 있다면 인증서버에 토큰을 전달받을 수 있다.
    • server To server, UI 없는 서버에 많이 사용된다

Refresh Token Grant Type

  • 새로고침 토큰 부여 타입, Authorization Code, Resource Owner Password Type에서 지원
  • 전달받은 토큰에는 만료기간이 있고, 기간이 만료되면 원래라면 인증을 다시 받아야 하지만, 인증을 받지 않고 다시 재발급받을 수 있게 해주는 token이다.

PKCE-enhanced Authorization Code Grant Type

  • PKCE 권한 코드 부여 타입, 서버 사이드 애플리케이션, 공개 클라이언트 어플리케이션
  • Authorization Code Grant Type과 매우 비슷하며, 좀 더 강화된 보안 기능을 제공한다

권한부여 흐름 선택 기준

권한 부여 흐름 선택 기준

  • JavaScript 기반 암호화는 Implicit  Flow, Authorization Code With PKCE를 기반으로 암호화를 진행하면 되고, 모바일은 Authorization Code With PKCE를 기반으로 암호화하면 된다.
  • 백앤드 기반 암호화는 Authorization Code Flow, Resource Owner Flow를 기반으로 암호화를 진행하면 된다.

매개 변수 용어

  • client_id : 인가서버에 등록된 클라이언트에 대해 생성된 고유 키
  • client_secret : 인가서버에 등록된 특정 클라이언트의 client_id에 대해 생성된 비밀 값
  • response_type 
    • 애플리케이션이 권한 부여 코드 흐름을 시작하고 있음을 인증 서버에 알려준다
    • code, token, id_token 이 있으며 token, id_token 은 implicit 권한부여유형에서 지원해야 한다
    • 서버가 쿼리 문자열에 인증 코드(code), 토큰(token, id_token) 등을 반환
  • grant_type : 권한 부여 타입 지정 - authorization_code, password, client_credentials, refresh_token
  • redirect_uri 
    • 사용자가 응용 프로그램을 성공적으로 승인하면 권한 부여 서버가 사용자를 다시 응용 프로그램으로 리디렉션 한다
    • redirect_uri 가 초기 권한 부여 요청에 포함된 경우 서비스는 토큰 요청 API에서도 이를 요구해야 한다.
    • 토큰 요청의 redirect_uri는 인증 코드를 생성할 때 사용된 redirect_uri와 정확히 일치해야 한다. 그렇지 않으면 서비스는 요청을 거부해야 한다.
    • 누군가가 Client_id, Client_secret을 가로챘을 경우, 인증서버에서는 해당 키값이 정상요청인지 잘못된 요청인지 알 수 없기 때문에 redirect_uri를 통해 이를 검증한다.
  • scope
    • 애플리케이션이 사용자 데이터에 접근하는 것을 제한하기 위해 사용된다 – email profile read write..
    • 사용자에 의해 특정 스코프로 제한된 권한 인가권을 발행함으로써 데이터 접근을 제한한다
  • state
    • 응용 프로그램은 임의의 문자열을 생성하고 요청에 포함하고 사용자가 앱을 승인한 후 서버로부터 동일한 값이 반환되는지 확인해야 한다.
    • 이것은 CSRF 공격을 방지하는 데 사용된다
728x90