본문으로 건너뛰기

OpenID Connect (OIDC)로 소셜 로그인을 설정하세요

OpenID Connect (OIDC) 프로토콜에 대한 공식 Logto 커넥터입니다.

:

이 가이드는 Logto 커넥터에 대한 기본적인 이해를 전제로 합니다. 익숙하지 않은 분들은 커넥터 가이드를 참조하여 시작하세요.

시작하기

OIDC 커넥터는 Logto가 OIDC 프로토콜을 지원하는 임의의 소셜 아이덴티티 제공자 (IdP)와 연결할 수 있도록 합니다.

노트:

OIDC 커넥터는 Logto에서 특별한 종류의 커넥터로, 몇 가지 OIDC 기반 커넥터를 추가할 수 있습니다.

OIDC 앱 생성하기

이 페이지를 열었을 때, 이미 연결하고자 하는 소셜 아이덴티티 제공자를 알고 있다고 믿습니다. 가장 먼저 해야 할 일은 아이덴티티 제공자가 OIDC 프로토콜을 지원하는지 확인하는 것입니다. 이는 유효한 커넥터를 구성하기 위한 전제 조건입니다. 그런 다음, 아이덴티티 제공자의 지침에 따라 OIDC 인가를 위한 관련 앱을 등록하고 생성하세요.

커넥터 구성하기

보안상의 이유로 "Authorization Code" 그랜트 타입만 지원하며, 이는 Logto의 시나리오에 완벽하게 맞습니다.

clientIdclientSecret은 OIDC 앱의 세부 정보 페이지에서 찾을 수 있습니다.

clientId: 클라이언트 ID는 인가 서버에 등록할 때 클라이언트 애플리케이션을 식별하는 고유 식별자입니다. 이 ID는 인가 서버가 클라이언트 애플리케이션의 아이덴티티를 확인하고, 특정 클라이언트 애플리케이션과 관련된 모든 인가된 액세스 토큰을 연결하는 데 사용됩니다.

clientSecret: 클라이언트 시크릿은 인가 서버가 등록 시 클라이언트 애플리케이션에 발급하는 기밀 키입니다. 클라이언트 애플리케이션은 이 시크릿 키를 사용하여 인가 서버에 액세스 토큰을 요청할 때 자신을 인증합니다. 클라이언트 시크릿은 기밀 정보로 간주되며 항상 안전하게 보관되어야 합니다.

tokenEndpointAuthMethod: 토큰 엔드포인트 인증 방법은 클라이언트 애플리케이션이 액세스 토큰을 요청할 때 인가 서버에 자신을 인증하는 데 사용됩니다. 지원되는 방법을 확인하려면 OAuth 2.0 서비스 제공자의 OpenID Connect 디스커버리 엔드포인트에서 token_endpoint_auth_methods_supported 필드를 참조하거나, OAuth 2.0 서비스 제공자가 제공하는 관련 문서를 참조하세요.

clientSecretJwtSigningAlgorithm (선택 사항): tokenEndpointAuthMethodclient_secret_jwt일 때만 필요합니다. 클라이언트 시크릿 JWT 서명 알고리즘은 클라이언트 애플리케이션이 토큰 요청 중에 인가 서버에 전송하는 JWT를 서명하는 데 사용됩니다.

scope: 스코프 매개변수는 클라이언트 애플리케이션이 접근을 요청하는 리소스와 권한의 집합을 지정하는 데 사용됩니다. 스코프 매개변수는 일반적으로 특정 권한을 나타내는 값의 공백으로 구분된 목록으로 정의됩니다. 예를 들어, "read write"라는 스코프 값은 클라이언트 애플리케이션이 사용자의 데이터에 대한 읽기 및 쓰기 접근을 요청하고 있음을 나타낼 수 있습니다.

authorizationEndpoint, tokenEndpoint, jwksUriissuer를 OpenID Provider의 구성 정보로 찾을 수 있습니다. 이는 소셜 벤더의 문서에 제공되어야 합니다.

authenticationEndpoint: 이 엔드포인트는 인증 과정을 시작하는 데 사용됩니다. 인증 과정은 일반적으로 사용자가 로그인하고 클라이언트 애플리케이션이 자신의 리소스에 접근할 수 있도록 인가를 부여하는 것을 포함합니다.

tokenEndpoint: 이 엔드포인트는 클라이언트 애플리케이션이 요청된 리소스에 접근할 수 있는 id 토큰을 얻기 위해 사용됩니다. 클라이언트 애플리케이션은 일반적으로 그랜트 타입과 인가 코드를 포함하여 토큰 엔드포인트에 요청을 보내 id 토큰을 받습니다.

jwksUri: 이는 소셜 아이덴티티 제공자 (줄여서 IdP)의 JSON Web Key Set (JWKS)을 얻을 수 있는 URL 엔드포인트입니다. JWKS는 IdP가 인증 과정에서 발급하는 JSON Web Token (JWT)을 서명하고 검증하는 데 사용하는 암호화 키의 집합입니다. jwksUri는 의존 당사자 (RP)가 IdP가 JWT를 서명하는 데 사용하는 공개 키를 얻기 위해 사용되며, RP는 IdP로부터 받은 JWT의 진위성과 무결성을 검증할 수 있습니다.

issuer: 이는 IdP의 고유 식별자로, RP가 IdP로부터 받은 JWT를 검증하는 데 사용됩니다. 이는 JWT에 iss 클레임으로 포함됩니다 (Id 토큰은 항상 JWT입니다). 발급자 값은 IdP의 인가 서버 URL과 일치해야 하며, RP가 신뢰하는 URI여야 합니다. RP가 JWT를 받으면, iss 클레임을 확인하여 신뢰할 수 있는 IdP에 의해 발급되었는지, 그리고 JWT가 RP와 함께 사용하기 위한 것인지 확인합니다.

jwksUriissuer는 인증 과정에서 최종 사용자의 아이덴티티를 검증하기 위한 안전한 메커니즘을 제공합니다. jwksUri에서 얻은 공개 키를 사용하여, RP는 IdP가 발급한 JWT의 진위성과 무결성을 검증할 수 있습니다. 발급자 값은 RP가 신뢰할 수 있는 IdP에 의해 발급된 JWT만 수락하고, JWT가 RP와 함께 사용하기 위한 것임을 보장합니다.

항상 인증 요청이 필요하기 때문에, authRequestOptionalConfig가 모든 선택적 구성을 포괄하도록 제공됩니다. 자세한 내용은 OIDC 인증 요청을 참조하세요. 이 구성에서 nonce가 누락된 것을 발견할 수도 있습니다. nonce는 각 요청마다 동일해야 하므로, 우리는 nonce의 생성을 코드 구현에 포함시켰습니다. 그러니 걱정하지 마세요! 앞서 언급한 jwksUriissueridTokenVerificationConfig에 포함되어 있습니다.

표준 OIDC 프로토콜이 암시적 및 하이브리드 플로우를 모두 지원하는데, Logto 커넥터가 인가 플로우만 지원하는 이유가 궁금할 수 있습니다. 암시적 및 하이브리드 플로우는 인가 플로우보다 덜 안전한 것으로 판단되었습니다. Logto는 보안에 중점을 두고 있기 때문에, 사용자에게 가장 높은 수준의 보안을 제공하기 위해 인가 플로우만 지원합니다. 이는 약간 덜 편리할 수 있습니다.

responseTypegrantType은 "Authorization Code" 플로우에서만 고정된 값일 수 있으므로, 우리는 이를 선택 사항으로 만들고 기본 값이 자동으로 채워지도록 했습니다.

노트:

모든 플로우 타입에 대해, 우리는 사용자 정의 매개변수를 넣을 수 있는 OPTIONAL customConfig 키를 제공했습니다. 각 소셜 아이덴티티 제공자는 OIDC 표준 프로토콜에 대한 자체 변형을 가질 수 있습니다. 원하는 소셜 아이덴티티 제공자가 OIDC 표준 프로토콜을 엄격히 준수한다면, customConfig에 대해 신경 쓸 필요가 없습니다.

구성 타입

이름타입필수 여부
scopestringTrue
clientIdstringTrue
clientSecretstringTrue
authorizationEndpointstringTrue
tokenEndpointstringTrue
idTokenVerificationConfigIdTokenVerificationConfigTrue
authRequestOptionalConfigAuthRequestOptionalConfigFalse
customConfigRecord<string, string>False
AuthRequestOptionalConfig 속성타입필수 여부
responseTypestringFalse
tokenEndpointstringFalse
responseModestringFalse
displaystringFalse
promptstringFalse
maxAgestringFalse
uiLocalesstringFalse
idTokenHintstringFalse
loginHintstringFalse
acrValuesstringFalse
IdTokenVerificationConfig 속성타입필수 여부
jwksUristringTrue
issuerstring | string[]False
audiencestring | string[]False
algorithmsstring[]False
clockTolerancestring | numberFalse
critRecord<string, string | boolean>False
currentDateDateFalse
maxTokenAgestring | numberFalse
subjectstringFalse
typstringFalse

IdTokenVerificationConfig에 대한 자세한 내용은 여기를 참조하세요.