WEB/Security

OAuth 2.0 용어 이해

Tony Lim 2022. 11. 16. 15:44
728x90

OAuth2.0 인가 프레임워크는 앱(Client)이 사용자(User) 대신하여 사용자의 자원(Resource Server)에 대한 제한된 엑세스를 얻기 위해 승인 상호 작용을 함으로써 앱이 자체적으로 액세스 권한을 얻도록한다.

그전에는 Client가 User의 id,pasword 를 직접 받아서 resource server에게 요청을 하였다.
보안에 취약하고 , resource server의 모든 서비스를 사용가능하게되고 , 앱(Client)를 믿을 만한가?

 

Resource Owner (User) = 자원의 주인 , 접근권한을 부여하는 사람이다.

Resource Sever  = 타 앱에서 접근하는 사용자의 자원이 포함된 서버 , 엑세스 토큰을 수락 및 검증할 수 있어야 하며 권한 체계에 따라 요청을 승인함

Authroization Server = Client 가 User 계정에 대한 동의 및 접근을 요청 할때 User가 승인해주면 access token을 client에게 주는 서버

Client = 앱

resource server에서 access token 을 검증할떄도 있고 위와같이 Authorization server에게 다시 물어보는 경우도 존재한다.

 

keycloak을 통한실습

1. client , user 생성
2. http://localhost:8080/realms/oauth2/protocol/openid-connect/auth?response_type=code&client_id=oauth2-client-app&scope=openid profile email&redirect_uri=http://localhost:8081
으로 authoriztion_code 요청
3. 8081이 현재 기동이 안되어 있으니 에러페이지 발생 , code만 받아옴
4. code를 가지고 http://localhost:8080/realms/oauth2/protocol/openid-connect/token
으로 access_token 요청
5. http://localhost:8080/realms/oauth2/protocol/openid-connect/userinfo 
access_token으로 사용자 정보 요청

clients Settings 에서 LoginSetting에서 Consent를켜줘야 code요청시 user가 로그인후에 어떤 resource를 인가할 것인지 물어보는 페이지가 나옴


Oauth2 Client Types

기밀 클라이언트 (Confidential Clients) = client secret 의 기밀성을 유지할 수 있는 클라이언트 = 웹 앱(java, net ,nodejs) 이 그러하다. 이미 컴파일되어 있으므로 안에 들어있는 client secret 을 알기 힘듬

공개 클라이언트 (Public Clients) = 임베디드 장치에서 실행 되는 앱 , 브라우저에서 실행되는 앱 등 개발자 콘솔 툴이나 도구를 이용하여 client secert이 추출이 가능하다.
서버측이 아닌 리소스 소유자가 사용하는 장치에서 실행되는 클라이언트는 공개클라이언트로 간주됨

front channel에서 token 토큰 교환 + client secret 교환을 하면 위험하다. 위에서 언급 했듯이 여러 툴들로 확인 할 수 있기 떄문이다.

backchannel 은 위에 keycloak 에서 실습했듯이 client_id 로만 전달해서  Authorization_code를 받고 
server에 존재하는 client secret과 받은code를 함께 다시 Authorization server에게 acces token을 요청한다.


Oauth2 Token Types

Access Token = 클라이언트에서 사용자의 보호된 리소스에 접근하기 위해 사용하는 일종의 자격증명으로서 역할을 하며 리소스 소유자(User) 가 클라이언트에게 부여한 권한 부여의 표현이다.
2가지 Type을 가지는데
Identifier Type = 유의미한 정보가 포함디지 않은 그저 식별자임, Auth server에게 항상 검증을 받아야함
Self-contained Type = JWT처럼 스스로 정보를 지닌다. Auth Server에게 검증 받을 필요가 없음

Refresh Token = Access Token이 만료된 후 새 엑세스 토큰을 얻기 위해 클라이언트
응용 프로그램에서 사용하는 자격증명
리소스서버에게 가지 않고 Authorization Server의 endpoint 에만 전달된다.

ID Token = openID Connect 에서 사용됨

Authorization_code = 클라이언트가 액세스 토큰과 교환할 임시 코드.

 

 

 

https://www.inflearn.com/course/%EC%A0%95%EC%88%98%EC%9B%90-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0/dashboard

 

스프링 시큐리티 OAuth2 - Spring Boot 기반으로 개발하는 Spring Security OAuth2 - 인프런 | 강의

스프링 시큐리티 OAuth2의 기본 개념부터 API 사용법과 내부 아키텍처를 학습합니다. 아울러 OAuth2 Client, OAuth2 Resource Server, Authorization Server를 통합하여 연동하는 방법을 살펴보고 자체 인가 서버를

www.inflearn.com

 

 

728x90