Open ID Connect
OAuth 2.0 을 확장하여 인증 방식을 표준화 한 OAuth 2.0 기반의 인증 프로토콜
scope 지정시 openid 를 포함하면 OpenID Connect를 사용이 가능하며 인증에 대한 정보는 ID Token 을 JWT형태로 반환된다.
Client가 User 의 id를 확인할 수있게 해주는 ID Token을 제공
햇갈릴만한 개념
OAuth2.0은 본래 인가(authorize) framework이다. 주로 Client(app)에서 인증하는 방법은 다음과 같다.
Auth server에서 access token 을 통해서 사용자의 정보를 resource server 를 통해서 받아와 인증을 할 수 있다.
Open ID는 인증(authenticate) 요청을 위한것 임으로 ID Token 을 통해서 인증을 처리할 수 있다. 안에 사용자 정보가 들어 있으니까
모든 인가서버(base-server-url)에서 사용할 때 해당 문서 경로는 고정이다.
ID Token and Scope
id token은 client app에서 인증을 위해 사용되는 용도
access token 은 resoruce server에서 자원을 가지고오는 용도
id token 만 가지고 사용자가 인증되었음을 증명할 수 있다.
id token은 auth server의 private key로 서명되어 있다. (토큰의 출처가 보장되고 변조되지 않았음을 보장)
client는 public key로 id token 을 검증한다.
OpenID Provider(OP) = OpenID 제공자로 최종 사용자를 인증하고 인증 결과와 사용자에 대한 정볼르 신뢰 당사자에게 제공할 수있는 OAuth2.0 서버
Relying Party(RP) = OpenID Provider를 사용하는 app(client)
1. RP는 OP에 권한 부여 요청
2. OP는 User(최종 사용자) 를 인증하고 권한을 얻음
3. OP는 ID token + access token 을 RP(client)에게 줌
4. RP 는 access token을 사용하여 UserInfo endpoint에 요청을 보내고 받은 정보로 인증해도 되고
ID token으로 인증가능하다.
response type이 id_token을 지원해야한다. 복수로 넣어줄수 있다.( code token id_token )
keycloak에서는 복수로 넣어주는것을 지원하지만 Spring Security는 code만 지원한다.
request에 포함된 nonce가 response JWT claim 에 동일한 값이 들어 있는것을 Client에서 확인하고 인증을 해야한다.(Implict 요청일 경우 필수 nonce를 넣어줘야함)
OAuth2.0 Client
인가서버 및 리소스 서버와의 통신을 담당하는 클라이언트의 기능을 필터 기반으록 구현한 모듈
간단한 설정만으로 OAuth2.0 인증 및 리소스 접근 권한, 인가서버 엔드 포인트 통신등의 구현이 가능하며 커스터마이징의 확장이 용이하다.
OAuth 2.0Login API
Client를 사용하는 User를 Oauth 2.0 Provider 나 Open ID Connect 계정으로 로그인 할 수 있는 기능을 제공한다.
구글계정으로 로그인 , 깃허브 계정으로 로그인 등 글로벌 서비스 프로파이더를 통해 제공한다.
권한 부여 방식은 authorization code를 사용한다.
OAuth2.0 Client API
인가서버의 권한 부여 유형에 따른 엔드포인트와 직접 통신할 수 있는 API를 제공
Client Credentials, Resource Owner Password Credentials , Refresh Token 나머지 권한 부여 유형을 구현할 수 있다.
리소스 서버의 보호자원 접근에 대한 연동 모듈을 구현 할 수 있다.
'WEB > Security' 카테고리의 다른 글
OAuth 2.0 Client - oauth2Login() (1) | 2022.11.22 |
---|---|
OAuth 2.0 Client Fundamentals (0) | 2022.11.18 |
OAuth 2.0 권한부여 유형 (0) | 2022.11.17 |
OAuth 2.0 용어 이해 (0) | 2022.11.16 |
Spring Security Fundamentals (0) | 2022.11.16 |