애플리케이션 데이터 구조
소개
Logto에서 애플리케이션은 Logto 플랫폼에 등록되어 사용자 정보를 액세스하거나 사용자를 대신하여 작업을 수행할 수 있는 권한을 부여받은 특정 소프트웨어 프로그램 또는 서비스를 의미합니다. 애플리케이션은 Logto API에 대한 요청의 출처를 식별하고, 해당 애플리케이션에 액세스하는 사용자의 인증 및 인가 과정을 관리하는 데 사용됩니다.
Logto의 로그인 경험에서 애플리케이션을 사용하면 사용자가 단일 위치에서 승인된 애플리케이션에 쉽게 액세스하고 관리할 수 있으며, 일관되고 안전한 인증 과정을 제공합니다. 이는 사용자 경험을 간소화하고, 조직을 대신하여 민감한 정보에 액세스하거나 작업을 수행하는 권한이 있는 사람만이 이를 수행하도록 보장합니다.
애플리케이션은 또한 Logto의 감사 로그에서 사용자 활동을 추적하고 잠재적인 보안 위협이나 침해를 식별하는 데 사용됩니다. 특정 작업을 특정 애플리케이션과 연결함으로써, Logto는 데이터가 어떻게 액세스되고 사용되는지에 대한 상세한 통찰력을 제공할 수 있으며, 조직이 보안 및 준수 요구 사항을 더 잘 관리할 수 있도록 합니다. 애플리케이션을 Logto와 통합하려면 Logto 통합을 참조하세요.
속성
애플리케이션 ID
애플리케이션 ID는 Logto에서 애플리케이션을 식별하기 위한 고유한 자동 생성 키이며, OAuth 2.0에서 client id로 참조됩니다.
애플리케이션 유형
애플리케이션은 다음 애플리케이션 유형 중 하나일 수 있습니다:
- 네이티브 앱은 네이티브 환경에서 실행되는 앱입니다. 예: iOS 앱, Android 앱.
- 디바이스 플로우 앱은 입력이 제한된 디바이스나 헤드리스 애플리케이션 (예: 스마트 TV, 게임 콘솔, CLI 도구, IoT 디바이스)을 위한 특별한 유형의 네이티브 앱입니다. 표준 리디렉션 기반 플로우 대신 OAuth 2.0 디바이스 인가 부여를 사용합니다. 자세한 내용은 디바이스 플로우 빠른 시작을 참조하세요.
- 싱글 페이지 앱은 웹 브라우저에서 실행되며, 서버에서 새로운 데이터를 받아 페이지를 업데이트하지만 전체 새로운 페이지를 로드하지 않는 앱입니다. 예: React DOM 앱, Vue 앱.
- 전통적인 웹 앱은 웹 서버에 의해 페이지를 렌더링하고 업데이트하는 앱입니다. 예: JSP, PHP.
- 기계 간 (M2M) 앱은 사용자 상호작용 없이 직접 서비스 간 통신을 위한 기계 환경에서 실행되는 애플리케이션입니다.
애플리케이션 비밀
애플리케이션 비밀은 인증 시스템에서 애플리케이션을 인증하는 데 사용되는 키로, 특히 개인 클라이언트 (전통적인 웹 및 M2M 앱)를 위한 개인 보안 장벽입니다.
싱글 페이지 앱 (SPA) 및 네이티브 앱은 앱 비밀을 제공하지 않습니다. SPA 및 네이티브 앱은 "공개 클라이언트"이며 비밀을 유지할 수 없습니다 (브라우저 코드 또는 앱 번들은 검사 가능합니다). 앱 비밀 대신, Logto는 PKCE, 엄격한 리디렉션 URI / CORS 검증, 단기 액세스 토큰, 리프레시 토큰 회전을 통해 이를 보호합니다.
애플리케이션 이름
애플리케이션 이름은 사람이 읽을 수 있는 애플리케이션의 이름이며, 관리자 콘솔에 표시됩니다.
애플리케이션 이름은 Logto에서 애플리케이션을 관리하는 중요한 구성 요소로, 관리자가 플랫폼 내에서 개별 애플리케이션의 활동을 쉽게 식별하고 추적할 수 있도록 합니다.
애플리케이션 이름은 관리자 콘솔에 액세스할 수 있는 모든 사용자에게 표시되므로 신중하게 선택해야 합니다. 애플리케이션의 목적과 기능을 정확하게 반영해야 하며, 이해하고 인식하기 쉬워야 합니다.
설명
애플리케이션에 대한 간단한 설명이 관리자 콘솔 애플리케이션 세부 정보 페이지에 표시됩니다. 설명은 애플리케이션의 목적, 기능 및 기타 관련 세부 정보를 관리자가 추가로 제공받을 수 있도록 합니다.
리디렉션 URI
리디렉션 URI는 애플리케이션에 대해 사전 구성된 유효한 리디렉션 URI 목록입니다. 사용자가 Logto에 로그인하고 애플리케이션에 액세스하려고 할 때, 애플리케이션 설정에 지정된 허용된 URI 중 하나로 리디렉션됩니다.
허용된 URI 목록은 인증 과정에서 애플리케이션이 Logto에 보낸 인가 요청에 포함된 리디렉션 URI를 검증하는 데 사용됩니다. 인가 요청에 지정된 리디렉션 URI가 애플리케이션 설정의 허용된 URI 중 하나와 일치하면, 성공적인 인증 후 사용자는 해당 URI로 리디렉션됩니다. 리디렉션 URI가 허용된 목록에 없으면, 사용자는 리디렉션되지 않으며 인증 과정이 실패합니다.
모든 유효한 리디렉션 URI가 Logto의 애플리케이션에 대한 허용 목록에 추가되어야 사용자가 인증 후 애플리케이션에 성공적으로 액세스할 수 있습니다.
리디렉션 엔드포인트를 참조하여 더 많은 정보를 확인할 수 있습니다.
인가 코드 플로우에서 OIDC의 리디렉션 URI 이해하기
와일드카드 패턴
사용 가능: 싱글 페이지 앱, 전통적인 웹 앱
리디렉션 URI는 미리보기 배포와 같은 동적 환경을 위해 와일드카드 패턴 (*)을 지원합니다. 와일드카드는 HTTP / HTTPS URI의 호스트명 및 경로명 구성 요소에서 사용할 수 있습니다.
규칙:
- 와일드카드는 호스트명 및 경로명에서만 허용됩니다.
- 와일드카드는 스킴, 포트, 쿼리 매개변수 또는 해시 조각에서는 허용되지 않습니다.
- 호스트명 와일드카드는 최소한 하나의 점을 포함해야 합니다 (예:
https://*.example.com/callback).
예시:
https://*.example.com/callback- 모든 하위 도메인과 일치https://preview-*.example.com/callback- 미리보기 배포와 일치https://example.com/*/callback- 모든 경로 세그먼트와 일치
와일드카드 리디렉션 URI는 표준 OIDC가 아니며 공격 표면을 증가시킬 수 있습니다. 가능한 경우 정확한 리디렉션 URI를 선호하고 주의해서 사용하세요.
로그아웃 후 리디렉션 URI
로그아웃 후 리디렉션 URI는 Logto에서 로그아웃한 후 사용자를 리디렉션하기 위해 애플리케이션에 대해 사전 구성된 유효한 URI 목록입니다.
로그아웃을 위한 허용된 로그아웃 후 리디렉션 URI의 사용은 OIDC의 RP-Initiated (Relying Party Initiated) 로그아웃 사양의 일부입니다. 이 사양은 사용자를 위한 로그아웃 요청을 시작하고, 로그아웃 후 사용자를 사전 구성된 엔드포인트로 리디렉션하는 표준화된 방법을 제공합니다.
사용자가 Logto에서 로그아웃하면, 세션이 종료되고 애플리케이션 설정에 지정된 허용된 URI 중 하나로 리디렉션됩니다. 이는 사용자가 로그아웃 후 승인된 유효한 엔드포인트로만 리디렉션되도록 하여, 알 수 없거나 검증되지 않은 엔드포인트로 사용자를 리디렉션하는 것과 관련된 무단 액세스 및 보안 위험을 방지합니다.
RP-initiated 로그아웃을 참조하여 더 많은 정보를 확인할 수 있습니다.
CORS 허용된 출처
CORS (Cross-origin resource sharing) 허용된 출처는 애플리케이션이 Logto 서비스에 요청을 보낼 수 있는 허용된 출처 목록입니다. 허용된 목록에 포함되지 않은 출처는 Logto 서비스에 요청을 보낼 수 없습니다.
CORS 허용된 출처 목록은 무단 도메인으로부터 Logto 서비스에 대한 액세스를 제한하고, 교차 사이트 요청 위조 (CSRF) 공격을 방지하는 데 사용됩니다. Logto에서 애플리케이션에 대한 허용된 출처를 지정함으로써, 서비스는 승인된 도메인만이 서비스에 요청을 보낼 수 있도록 보장할 수 있습니다.
허용된 출처 목록에는 애플리케이션이 제공될 출처가 포함되어야 합니다. 이는 애플리케이션의 요청이 허용되고, 무단 출처의 요청은 차단되도록 보장합니다.
OpenID 제공자 구성 엔드포인트
OpenID Connect Discovery를 위한 엔드포인트입니다.
인가 엔드포인트
인가 엔드포인트는 OIDC 용어로, 사용자의 인증 과정을 시작하는 데 사용되는 필수 엔드포인트입니다. 사용자가 Logto 플랫폼에 등록된 보호된 리소스 또는 애플리케이션에 액세스하려고 할 때, 그들은 인가 엔드포인트로 리디렉션되어 자신의 아이덴티티를 인증하고 요청된 리소스에 대한 인가를 얻습니다.
인가 엔드포인트를 참조하여 더 많은 정보를 확인할 수 있습니다.
토큰 엔드포인트
토큰 엔드포인트는 OIDC 용어로, OIDC 클라이언트가 OIDC 제공자로부터 액세스 토큰, ID 토큰 또는 리프레시 토큰을 얻기 위해 사용하는 웹 API 엔드포인트입니다.
OIDC 클라이언트가 액세스 토큰 또는 ID 토큰을 얻어야 할 때, 인가 코드 또는 리프레시 토큰과 같은 인가 부여와 함께 토큰 엔드포인트에 요청을 보냅니다. 토큰 엔드포인트는 인가 부여를 검증하고, 부여가 유효한 경우 클라이언트에게 액세스 토큰 또는 ID 토큰을 발급합니다.
토큰 엔드포인트를 참조하여 더 많은 정보를 확인할 수 있습니다.
사용자 정보 엔드포인트
OpenID Connect 사용자 정보 엔드포인트.
항상 리프레시 토큰 발급
사용 가능: 전통적인 웹, SPA
활성화되면, Logto는 인증 요청에 prompt=consent가 표시되지 않거나 스코프에 offline_access가 표시되지 않더라도 항상 리프레시 토큰을 발급합니다.
그러나 이 관행은 필요하지 않는 한 권장되지 않습니다 (일반적으로 리프레시 토큰이 필요한 일부 타사 OAuth 통합에 유용함). 이는 OpenID Connect와 호환되지 않으며 잠재적으로 문제를 일으킬 수 있습니다.
리프레시 토큰 회전
기본값: true
활성화되면, Logto는 다음 조건에서 토큰 요청에 대해 새로운 리프레시 토큰을 발급합니다:
- 리프레시 토큰이 1년 동안 회전된 경우 (TTL이 연장되어 새로운 토큰이 발급됨); 또는
- 리프레시 토큰이 만료 시간에 가까운 경우 (원래 TTL의 70% 이상 경과됨); 또는
- 클라이언트가 공개 클라이언트인 경우, 예: 네이티브 애플리케이션 또는 싱글 페이지 애플리케이션 (SPA).
공개 클라이언트의 경우, 이 기능이 활성화되면 클라이언트가 리프레시 토큰을 사용하여 새로운 액세스 토큰을 교환할 때마다 항상 새로운 리프레시 토큰이 발급됩니다. 이러한 공개 클라이언트에 대해 기능을 비활성화할 수 있지만, 보안상의 이유로 활성화 상태를 유지하는 것이 강력히 권장됩니다.
리프레시 토큰 회전 이해하기
리프레시 토큰의 TTL (Time-to-live) 일수
사용 가능: SPA 제외; 기본값: 14일
리프레시 토큰이 만료되어 무효화되기 전에 새로운 액세스 토큰을 요청할 수 있는 기간입니다. 토큰 요청은 리프레시 토큰의 TTL을 이 값으로 연장합니다.
일반적으로 더 낮은 값이 선호됩니다.
참고: 보안상의 이유로 SPA (싱글 페이지 앱)에서는 TTL 갱신이 불가능합니다. 이는 Logto가 토큰 요청을 통해 TTL을 연장하지 않음을 의미합니다. 사용자 경험을 향상시키기 위해 "리프레시 토큰 회전" 기능을 활성화하여 필요할 때 Logto가 새로운 리프레시 토큰을 발급할 수 있도록 할 수 있습니다.
인가 요청에서 offline_access 스코프 없이 리프레시 토큰이 발급되면, 사용자 세션에 바인딩됩니다. 세션은 14일의 고정 TTL을 가집니다. 세션이 만료되면, 리프레시 토큰은 자체 TTL 설정과 관계없이 무효화됩니다.
리프레시 토큰 TTL 설정이 완전히 적용되도록 하려면, 인가 요청에 offline_access 스코프를 포함해야 합니다.
백채널 로그아웃 URI
OpenID Connect 백채널 로그아웃 엔드포인트입니다. 자세한 내용은 연합 로그아웃: 백채널 로그아웃을 참조하세요.
허용된 최대 부여 (maxAllowedGrants)
maxAllowedGrants는 customClientMetadata 아래의 선택적 앱 수준 필드로, 현재 앱에 대한 사용자당 최대 동시 활성 부여 수를 제어합니다.
- 기본값:
undefined(제한 없음) - 구성된 경우: 각 성공적인 인가 시, Logto는 현재 앱에서 사용자의 총 활성 부여 수를 확인합니다 (브라우저 및 디바이스 전반에 걸쳐). 제한을 초과하면, Logto는 가장 오래된 부여를 취소합니다.
이 설정은 앱당 동시 인증된 디바이스를 제한하고자 할 때 유용합니다.
이 필드는 다음에 대해 지원되지 않습니다:
- 기계 간 앱
- 보호된 앱
- SAML 앱
사용자 정의 데이터
미리 정의된 애플리케이션 속성에 나열되지 않은 추가 사용자 정의 애플리케이션 정보로, 사용자는 비즈니스별 설정 및 구성과 같은 특정 요구에 따라 사용자 정의 데이터 필드를 정의할 수 있습니다.