Spring/Oauth2

Open ID Connect OIDC

hwanguu 2025. 1. 16. 00:13

개요 및 특징

  • OpenID Connect 1.0은 OAuth 2.0 프로토콜 위에 구축된 ID 계층으로 OAuth 2.0을 확장하여 인증 방식을 표준화 한 OAuth 2.0 기반의 인증 프로토콜이다
  • scope 지정 시 “openid” 를 포함하면 OpenID Connect 사용이 가능하며 인증에 대한 정보는 ID 토큰 (ID Token )이라고 하는 JSON 웹 토큰(JWT) 으로 반환된다
  • OpenID Connect는 클라이언트가 사용자 ID를 확인할 수 있게 하는 보안 토큰인 ID Token 제공한다

아래 사진과 같이 scope 에 openid를 넣어야 OIDC가 활성화 된다.

Authorization Code, Implicit, password Credentials, Client Credentials 전부 scope에 openid를 넣으면 된다.

 

 

 

Oauth 2.0, OIDC 비교

 

 

Oauth2.0

사용 목적 : Oauth2.0프로토콜은 권한(인가) 획득하기 위해서 사용한다.

 

예를들어서 네이버에서 페이스북, 인스타그램의 사진을 가지고오고 싶은경우 (가장 많이 사용하는 Authorization Code Flow로 설명)

  1. 네이버에 회원가입후 로그인을 한다.
  2. 네이버에서 제공하는 페이스북, 인스타그램의 사진 가져오기 기능을 사용한다
  3. 네이버에서는 페이스북, 인스타그램의 권한승인을 받는 페이지로 redirection 시킨다.
  4. 사용자가 페이스북, 인스타그램에서 자신의 데이터를 접근할수 있도록 허용한다.
  5. 페이스북, 인스타그램에서 사용자의 데이터에 접근할 수 있는 Access Token을 발급한다.
  6. 네이버는 발급받은 Access Token을 가지고 페이스북,인스타그램 API 를 호출하여 사진데이터를 가져온다.

핵심 개념

  • OAuth 2.0의 역할:
    사용자(당신)의 민감한 로그인 정보(아이디/비밀번호)를 공유하지 않고도 naver.com이 페이스북, 인스타그램의 데이터를 가져올 수 있도록 안전한 방식으로 권한을 위임한다.
  • Access Token:
    페이스북, 인스타그램이 발급하는 "권한 증명서"로, 이를 통해 naver.com은 정해진 범위 내에서만 사용자의 데이터를 가져올 수 있다.

 

OIDC

사용 목적 : OIDC는 인증을 위해서 사용한다.

 

예를들어서 네이버에서 구글, 카카오로 로그인하고 싶은경우(가장 많이 사용하는 Authorization Code Flow로 설명)

  1. 네이버에 접속후 구글, 카카오로 로그인 버튼 클릭
  2. 네이버는 구글, 카카오의 OIDC Authorization Endpoint로 Redirection 한다.
  3. 구글, 카카오의 로그인 화면에서 계정과 비밀번호를 입력 후 scope(email, 이름, 등등...)에 접근할 수 있도록 승인한다.
  4. 승인이 되면 Authorization Code를 발급하고 2번에서 Redirection 할때 파라미터로 넘긴 인증후 redirection URL로 redirection 시킨다.
  5. 네이버 서버에서는 4번에서 받은 Authorization Code를 가지고 구글, 카카오의 Token Endpoint에 요청을 보내서 AccessToken, ID Token을 발급 받는다.
  6. 네이버는 ID Token을 통해서 사용자의 정보를통해 네이버 계정을 생성하거나 세션을 생성한다.
  7. 이과정을 통해 변도의 회원가입 절차 없이 사용자를 인증한다.

AccessToken : 사용자의 구글,카카오 리소스에 접근하기 위한 토큰

ID Token : 사용자의 인증 정보가 포함된 JWT(위 과정중 3번 과정에 scope 에 명시한 데이터들이 들어있다)

 

 

OIDC를 사용해야하는 이유

  • "구글 로그인"과 같은 소셜 로그인을 구현할 때.
  • 사용자의 인증을 간소화하고 중앙화된 인증 제공.
  • OAuth 2.0으로 부족했던 인증(Authentication) 문제를 해결.

 

 

OIDC vs OAuth2.0

  • OIDC는 주로 사용자 인증(로그인)에 초점을 맞춘 프로토콜
    • 예: 구글 계정을 통해 네이버에 로그인.
  • OAuth 2.0권한 부여에 초점을 맞춘 프로토콜
    • 예: 네이버가 페이스북에서 사용자의 사진 데이터를 가져오는 것.

 

 

OIDC의 장점

  1. 회원가입 없이 간편한 로그인:
    사용자는 별도로 회원가입하지 않아도 구글 계정을 통해 네이버에 로그인할 수 있다.
  2. ID Token을 통한 사용자 정보 제공:
    ID Token에 사용자의 기본 정보(예: 이름, 이메일)가 포함되어 있어 추가적인 API 호출 없이 사용자 정보를 가져올 수 있다
  3. 표준 프로토콜 사용:
    OIDC는 전 세계적으로 사용되는 표준 프로토콜로, 다양한 서비스 간 호환이 쉽다.

 

OpenID Connect Discovery 1.0 Provider Metadata

OpenID Connect 를 사용하기 위해 필요한 모든 엔드 포인트 및 공개 키 위치 정보를 포함 하여 OpenID 공급자의 구성에 대한 클레임 집합을 나타낸다.

 

검색 문서 경로 : ~/.well-known/openid-configuration

 

keycloak의 경우

http://localhost:8080/realms/렐름명/.well-known/openid-configuration

 

 

 

References 및 사진 출처

정수원 스프링 시큐리티 OAuth2

'Spring > Oauth2' 카테고리의 다른 글

OIDC Scope  (0) 2025.01.17
ID Token  (0) 2025.01.17
Oauth2 PKCE-enhanced Authorization Code Grant  (0) 2025.01.12
Oauth2 Refresh Token Grant  (0) 2025.01.12
Oauth2 Client Credentials Grant  (0) 2025.01.12