전체 글 72

OIDC Scope

ScopeScope설명openid 필수, 클라이언트가 OpenID Connect 요청을 하고 있음을 인증 서버에 알린다profile기본 프로필 클레임에 대한 액세스 요청email이메일 및 email_verified 클레임에 대한 액세스 요청address주소 클레임에 대한 액세스 요청phonephone_number 및 phone_number_verified 클레임에 대한 액세스 요청 Scope 는 위의 스코프 이외에 Custom 으로도 생성할 수 있다. Request URLlocalhost:8080/realms/oauth2/protocol/openid-connect/auth?response_type=code&client_id=oauth2-client-app&scope=openid profile email&..

Spring/Oauth2 2025.01.17

ID Token

ID Token 이란ID Token은 사용자가 인증 되었음을 증명하는 토큰이다. ID 토큰은 사용자가 인증 되었음을 증명하는 결과물로서 OIDC 요청 시 access token 과 함께 클라이언트에게 전달되는 토큰이다ID 토큰은 JWT(JSON 웹 토큰)으로 표현되며 헤더, 페이로드 및 서명으로 구성된다ID 토큰은 개인 키로 발급자가 서명하는 것으로서 토큰의 출처를 보장하고 변조되지 않았음을 보장한다.어플리케이션은 공개 키로 ID 토큰을 검증 및 유효성을 검사하고 만료여부 등 토큰의 클레임을 확인 한다클라이언트는 클레임 정보에 포함되어 있는 사용자명, 이메일을 활용하여 인증 관리를 할 수 있다 ID Token vs Access Token ID Token 은 OpenID Provider에서 사용자가 인증 ..

Spring/Oauth2 2025.01.17

Open ID Connect OIDC

개요 및 특징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 전부 s..

Spring/Oauth2 2025.01.16

Oauth2 PKCE-enhanced Authorization Code Grant

PKCE(Proof Key for Code Exchange, RFC - 6749) 개요 코드 교환을 위한 증명 키로서 CSRF 및 권한부여코드 삽입 공격을 방지하기 위한 Authorization Code Grant Flow 의 확장버전이다.  권한부여코드 요청시 Code Verifier와 Code Challenge 를 추가하여 만약 Authorization Code Grant Flow 에서 Authrozization Code 가 탈취당했을 때 Access Token을 발급하지 못하도록 차단한다. PKCE는 원래 모바일 앱에서 Authorization Code Grant Flow 를 보호하도록 설계되었으며 나중에 단일 페이지 앱에서도 사용하도록 권장되으며 모든 유형의OAuth2 클라이언트, 심지어 클라이언..

Spring/Oauth2 2025.01.12

Oauth2 Refresh Token Grant

개요 1. 흐름 및 특징액세스 토큰이 발급될 때 함께 제공되는 토큰으로서 액세스 토큰이 만료되더라도 함께 발급받았던 리프레시 토큰이 유효하다면, 인증 과정을 처음부터 반복하지 않아도 액세스 토큰을 재발급 받을수 있다.한 번 사용된 리프레시 토큰은 폐기되거나 재사용 할 수 있다 2. 권한 부여 승인 요청 시 매개변수 grant_type=refresh_token (필수) refresh_token client_id (필수) client_secret (필수) 흐름   실습기본세팅 : https://hwanguu.tistory.com/71 Oauth2 Keycloak Docker compose, 기본세팅version: '3.9'services: postgres: image: postgres:latest conta..

Spring/Oauth2 2025.01.12

Oauth2 Client Credentials Grant

개요 1. 흐름 및 특징애플리케이션이 리소스 소유자인 동시에 클라이언트의 역할을 한다리소스 소유자에게 권한 위임 받아 리소스에 접근하는 것이 아니라 자기 자신이 애플리케이션을 사용할 목적으로 사용하는 것서버 대 서버간의 통신에서 사용할 수 있으며 IOT 와 같은 장비 어플리케이션과의 통신을 위한 인증으로도 사용할 수 있다.Client Id 와 Client Secret 을 통해 액세스 토큰을 바로 발급 받을 수 있기 때문에 Refresh Token 을 제공하지 않는다Client 정보를 기반으로 하기 때문에 사용자 정보를 제공하지 않는다.2. 권한 부여 승인 요청 시 매개변수 grant_type=client_credentials (필수) client_id (필수) client_secret (필수) scope..

Spring/Oauth2 2025.01.12

Oauth2 Password Grant

개요1. 흐름 및 특징애플리케이션이 사용자 이름과 암호를 액세스 토큰으로 교환할 때 사용된다.타사 어플리케이션이 이 권한을 사용하도록 허용해서는 안되고 고도의 신뢰할 자사 어플리케이션에서만 사용해야 한다. (어플리케이션이 사용자의 ID, PW를 알수있기 때문에 신뢰할수 있는 어플리케이션에 사용해야함)ID, PW를 어플리케이션이 인가서버로 보내야 하기 때문에 Back Channel 에서 사용해야한다.2. 권한 부여 승인 요청 시 매개변수grant_type=password (필수)username (필수)password (필수)client_id (필수)client_secret (필수)scope (선택사항) 흐름 실습기본세팅 : https://hwanguu.tistory.com/71 Oauth2 Keycloak..

Spring/Oauth2 2025.01.12

Oauth2 Implicit Grant

개요 1. 흐름 및 특징클라이언트에서 Javascript 및 HTML 소스 코드를 다운로드한 후 브라우저는 서비스에 직접 API 요청을 한다코드 교환 단계를 건너뛰고 대신 액세스 토큰이 쿼리 문자열 조각으로 클라이언트에 즉시 반환됩니다.이 유형은 back channel 이 없으므로 refresh token 을 사용하지 못한다.토큰 만료 시 어플리케이션이 새로운 access token을 얻으려면 다시 OAuth 승인 과정을 거쳐야 한다2. 권한 부여 승인 요청 시 매개변수response_type=token (필수), id_tokenclient_id (필수)redirect_uri (필수)scope (선택사항)state (선택사항) 흐름  실습기본세팅 : https://hwanguu.tistory.com/71..

Spring/Oauth2 2025.01.12

Oauth2 Authorization Code Grant

개요 1. 흐름 및 특징1) 사용자가 애플리케이션을 승인하면 인가서버는 Redirect URI 로 임시 코드 담아서 애플리케이션으로 다시 리다이렉션한다2) 애플리케이션은 해당 임시 코드를 인가서버로 전달하고 액세스 토큰으로 교환한다3) 애플리케이션이 액세스 토큰을 요청할 때 해당 요청을 클라이언트 암호로 인증할 수 있으므로 공격자가 인증 코드를 가로채서 스스로 사용할 위험이 줄어듬4) 액세스 토큰이 사용자 또는 브라우저에 표시되지 않고 애플리케이션에 다시 전달하는 가장 안전한 방법이므로 토큰이 다른 사람에게 누출될 위험이 줄어듬2. 권한부여코드 요청 시 매개변수uri : /realms/'realm 명'/protocol/openid-connect/auth GET (keycloak 기준) response_t..

Spring/Oauth2 2025.01.12