로컬 애플리케이션에 Snowflake OAuth 사용하기¶
:doc:`Snowflake OAuth</user-guide/oauth-snowflake-overview>`는 OAuth 인증 서버인 Snowflake 및 OAuth 인증 코드 흐름을 통해 사용자를 대신하여 인증하는 애플리케이션 간의 인터페이스를 정의하는 *보안 통합*을 생성하여 구현됩니다. Snowflake OAuth는 애플리케이션이 시크릿을 저장하거나 관리할 필요가 없고 외부 OAuth와 같은 서드 파티 ID 공급자를 구성할 필요가 없으므로 강력한 인증 옵션입니다.
해당 계정에는 로컬 애플리케이션(즉, 데스크톱 애플리케이션)이 Snowflake OAuth를 사용하여 인증하는 방식을 간소화하기 위해 :code:`SNOWFLAKE$LOCAL_APPLICATION`이라는 기본 제공 보안 통합이 있습니다. 보안 통합이 이미 존재하므로 로컬 애플리케이션이 Python 드라이버 또는 Snowflake CLI와 같은 Snowflake 클라이언트를 사용하는 경우, 애플리케이션은 클라이언트의 속성 또는 매개 변수를 설정하여 Snowflake에 인증할 수 있습니다. 더 이상 설정할 필요가 없습니다. 또한 기본 제공 통합은 Snowflake 클라이언트를 사용하는 대신 OAuth 엔드포인트를 직접 호출하는 로컬 애플리케이션의 설정을 간소화합니다.
관리자는 SNOWFLAKE$LOCAL_APPLICATION 통합의 매개 변수를 변경하여 OAuth 액세스 토큰 및 새로 고침 토큰의 유효 기간을 지정하는 등 해당 동작을 조정할 수 있습니다.
로컬 애플리케이션용 Snowflake OAuth에는 다음과 같은 추가적인 이점이 있습니다.
사용자가 생성한 Snowflake OAuth 통합과 달리, 역할 내 세션 전환이 지원**됩니다**.
현재 비밀번호를 사용하여 사용자를 인증하는 애플리케이션을 간단하게 대체할 수 있습니다. Snowflake는 :doc:`단일 요소 비밀번호 사용을 중단</user-guide/security-mfa-rollout>`합니다. 따라서 로컬 애플리케이션용 Snowflake OAuth는 많은 설정을 할 필요 없이 보다 안전한 인증 형식을 사용할 수 있는 경로를 제공합니다.
참고
SNOWFLAKE$LOCAL_APPLICATION 보안 통합은 모든 계정에 느리게 배포되고 있습니다. 계정에 이 기본 제공 통합이 있는지 확인하려면 다음 명령을 실행합니다.
SHOW SECURITY INTEGRATION LIKE 'SNOWFLAKE$LOCAL_APPLICATION';
Snowflake OAuth 통합 구성하기¶
기본 제공 SNOWFLAKE$LOCAL_APPLICATION 보안 통합은 시스템에서 소유하지만 보안 관리자(즉, SECURITYADMIN 시스템 역할 권한이 부여된 사용자)가 구성할 수 있습니다.
보안 관리자는 보안 통합의 다음 매개 변수를 구성할 수 있습니다.
매개 변수 |
설명 |
|---|---|
|
통합의 활성화 여부를 제어합니다. 통합이 비활성화된 경우 로컬 애플리케이션은 다른 인증 방법을 사용해야 합니다. |
|
인증 서버가 새로 고침 토큰을 발급할지 여부를 제어합니다. |
|
새로 고침 토큰의 유효 기간을 설정합니다. |
|
인증 서버가 일회용 새로 고침 토큰을 발급할지 여부를 제어합니다. |
|
액세스 토큰의 유효 기간을 설정합니다. |
예를 들어 인증 서버가 일회용 새로 고침 토큰 발급을 시작하도록 기본 제공 보안 통합을 수정하려면 다음 명령을 실행합니다.
USE ROLE SECURITYADMIN;
ALTER SECURITY INTEGRATION SNOWFLAKE$LOCAL_APPLICATION
SET OAUTH_SINGLE_USE_REFRESH_TOKENS_REQUIRED = TRUE;
이러한 매개 변수 설정에 대한 자세한 내용은 ALTER SECURITY INTEGRATION 섹션을 참조하세요
로그인 빈도 제어하기¶
``OAUTH_ISSUE_REFRESH_TOKENS = TRUE``인 경우, 애플리케이션은 새로 고침 토큰을 사용하여 사용자에게 다시 로그인하라는 메시지를 표시하지 않고 새 액세스 토큰을 획득할 수 있습니다. 사용자는 OAUTH_REFRESH_TOKEN_VALIDITY 매개 변수에 지정된 기간 이후 새로 고침 토큰이 만료될 때만 다시 인증하면 됩니다.
Snowflake OAuth를 사용하도록 로컬 애플리케이션 설정하기¶
이 섹션에서는 개발자가 Snowflake OAuth로 인증하도록 로컬 애플리케이션을 구성하는 데 필요한 세부 정보를 제공합니다. 다음 유형의 로컬 애플리케이션은 기본 제공 통합을 사용하여 인증할 수 있습니다.
Python 드라이버 또는 Snowflake CLI와 같은 Snowflake 클라이언트를 사용하는 로컬 애플리케이션. Snowflake 클라이언트를 사용하는 애플리케이션 섹션을 참조하십시오.
Snowflake 클라이언트를 사용하지 않고 REST 인증 엔드포인트 및 토큰 엔드포인트에 직접 OAuth 요청을 하는 로컬 애플리케이션. OAuth 엔드포인트를 직접 호출하는 애플리케이션 섹션을 참조하십시오.
Snowflake 클라이언트를 사용하는 애플리케이션¶
로컬 애플리케이션이 Snowflake ODBC 드라이버와 같은 Snowflake 클라이언트를 사용하는 경우, authenticator 연결 옵션을 :code:`oauth_authorization_code`로 설정하여 Snowflake OAuth를 통해 인증할 수 있습니다. 추가 개발 작업은 필요하지 않습니다.
전제 조건¶
로컬 애플리케이션용 Snowflake OAuth를 사용하는 경우 Snowflake 클라이언트가 사용자의 웹 브라우저를 열 수 있어야 합니다. 이러한 이유로 Snowflake 클라이언트 및 이를 사용하는 로컬 애플리케이션 모두 사용자의 컴퓨터에 설치되어 있어야 합니다. 서버에서 실행되는 코드에서 Snowflake 클라이언트를 사용하는 경우 로컬 애플리케이션용 Snowflake OAuth는 작동하지 않습니다.
지원되는 클라이언트¶
로컬 애플리케이션은 다음 Snowflake 클라이언트를 사용하여 로컬 애플리케이션용 Snowflake OAuth로 인증할 수 있습니다.
클라이언트 |
최소 필수 버전 |
필수 구성 |
|---|---|---|
.NET |
v4.8.0 |
연결 문자열에 :code:`authenticator=oauth_authorization_code`를 설정합니다. |
Go |
v1.14.1 |
연결 구성에 :code:`authenticator=oauth_authorization_code`를 설정합니다. |
JDBC |
v3.24.1 |
드라이버의 연결 문자열에 |
Node.js |
v2.1.0 |
연결 옵션에 :code:`authenticator: ‘oauth_authorization_code’`를 설정합니다. |
ODBC |
v3.9.0 |
|
Python |
v3.16.0 |
|
Snowflake CLI |
v3.8.1 |
연결 정의에 |
SnowSQL |
v1.4.0 |
구성 파일에 |
OAuth 엔드포인트를 직접 호출하는 애플리케이션¶
로컬 애플리케이션은 인증 서버로 Snowflake의 인증 엔드포인트 및 토큰 엔드포인트에 요청하여 Snowflake OAuth를 사용할 수 있습니다. Snowflake 클라이언트를 사용할 필요가 없습니다. 애플리케이션은 Snowflake의 인증 엔드포인트로 요청을 전송하여 사용자를 인증하고 인증 코드를 수신한 다음, 토큰 엔드포인트로 요청을 전송하여 해당 코드를 액세스 토큰으로 교환합니다.
Snowflake의 인증 및 토큰 엔드포인트에 REST 요청하기에 대한 자세한 내용은 OAuth 엔드포인트 호출하기 섹션을 참조하세요.
요청 요구 사항¶
인증 및 토큰 엔드포인트에 대한 애플리케이션의 REST 요청은 다음 요구 사항을 준수해야 합니다.
인증 엔드포인트에 대한 요청의 리디렉션 URL은 ``http://127.0.0.1[:port][/path]``여야 합니다. 즉, 로컬 애플리케이션은 Snowflake가 인증 서버로 반환한 인증 코드의 루프백 주소에서 수신 대기 중이어야 합니다.
인증 및 토큰 엔드포인트에 대한 요청에는 PKCE(Proof Key for Code Exchange)를 구현해야 합니다. 자세한 내용은 PKCE(Proof Key for Code Exchange) 섹션을 참조하십시오.
액세스 토큰에 대한 인증 코드를 교환하기 위해 토큰 엔드포인트를 호출할 때 애플리케이션은 적절한 클라이언트 ID 및 클라이언트 시크릿을 제공해야 합니다. 이 요구 사항은 이러한 클라이언트 자격 증명을 보내는 방법에 따라 약간 다릅니다.
요청 헤더에서 클라이언트 자격 증명을 보내는 경우 클라이언트 ID는 ``LOCAL_APPLICATION``이어야 하며, 클라이언트 시크릿은 ``LOCAL_APPLICATION``이어야 합니다.
POST 본문에서 클라이언트 자격 증명을 보내는 경우 클라이언트 ID는 ``LOCAL_APPLICATION``이어야 합니다. 기본 제공 통합은 로컬 애플리케이션을 공용 클라이언트로 구성하므로 POST 본문에서 클라이언트 ID를 :code:`client_id=LOCAL_APPLICATION`으로 제공하는 경우 클라이언트 시크릿은 필요하지 않습니다.
사용법 노트¶
모든 계정에는 SNOWFLAKE$LOCAL_APPLICATION 통합이 있으므로 이 통합은 복제되지 않습니다. 기본 제공 통합의 구성은 각 계정에 고유합니다.