OAuth 2.0 용어 이해
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 = 클라이언트가 액세스 토큰과 교환할 임시 코드.
스프링 시큐리티 OAuth2 - Spring Boot 기반으로 개발하는 Spring Security OAuth2 - 인프런 | 강의
스프링 시큐리티 OAuth2의 기본 개념부터 API 사용법과 내부 아키텍처를 학습합니다. 아울러 OAuth2 Client, OAuth2 Resource Server, Authorization Server를 통합하여 연동하는 방법을 살펴보고 자체 인가 서버를
www.inflearn.com