Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
auth — 사용자 관리 및 JWT 토큰 발급을 위한 JWT 기반 API | Kitploit
도구/GitHubGitHub/supabase/auth
Authentication & AuthorizationIdentity ManagementIdentity & Access Management (IAM)AuthenticationAuthentication #10위Authentication & Authorization #19위Identity & Access Management (IAM) #19위Identity Management #11위
2.6k797856일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitHub
supabase/auth

auth

사용자 관리 및 JWT 토큰 발급을 위한 JWT 기반 API

저장소 보기웹사이트
# Auth - Supabase의 인증 및 사용자 관리

[![Coverage Status](https://coveralls.io/repos/github/supabase/auth/badge.svg?branch=master)](https://coveralls.io/github/supabase/auth?branch=master)

Auth는 Go로 작성된 사용자 관리 및 인증 서버로서, [Supabase](https://supabase.com)의 다음과 같은 기능을 지원합니다:

- JWT 발급
- PostgREST를 통한 행 수준 보안
- 사용자 관리
- 이메일, 비밀번호, 매직 링크, 전화번호로 로그인
- 외부 제공자(Google, Apple, Facebook, Discord, ...)로 로그인

이 프로젝트는 원래 [Netlify의 GoTrue 코드베이스](https://github.com/netlify/gotrue)를 기반으로 하였지만, 두 프로젝트는 기능과 역량에서 크게 분기되었습니다.

프로젝트에 기여하려면 [기여 가이드](https://github.com/supabase/auth/blob/master/CONTRIBUTING.md)를 참조하세요.

## 목차

- [빠른 시작](#quick-start)
- [프로덕션에서 실행](#running-in-production)
- [구성](#configuration)
- [엔드포인트](#endpoints)

## 빠른 시작

자신의 사용자 지정 환경 변수를 저장하려면 `.env` 파일을 만드세요. [`example.env`](https://github.com/supabase/auth/blob/master/example.env)를 참조하세요.

1. Postgres 컨테이너에서 로컬 Postgres 데이터베이스를 시작합니다: `docker-compose -f docker-compose-dev.yml up postgres`
2. auth 바이너리를 빌드합니다: `make build` . 다음과 같은 출력이 표시되어야 합니다:```bash
go build -ldflags "-X github.com/supabase/auth/cmd.Version=`git rev-parse HEAD`"
GOOS=linux GOARCH=arm64 go build -ldflags "-X github.com/supabase/auth/cmd.Version=`git rev-parse HEAD`" -o gotrue-arm64
```
3. auth 바이너리를 실행하세요: `./auth`

### Docker가 설치된 경우

자체 맞춤 환경 변수를 저장하려면 `.env.docker` 파일을 만드세요. [`example.docker.env`](https://github.com/supabase/auth/blob/master/example.docker.env)를 참조하세요.

1. `make build`
2. `make dev`
3. `docker ps` 명령어는 두 개의 Docker 컨테이너(`auth-auth-1` 및 `auth-postgres-1`)를 표시해야 합니다.
4. 끝입니다! [헬스 체크 엔드포인트](http://localhost:9999/health)를 방문하여 auth가 실행 중인지 확인하세요.

## 프로덕션에서 실행하기

프로덕션 환경에서 인증 서버를 실행하는 것은 쉬운 일이 아닙니다. 우리는
[Supabase Auth](https://supabase.com/auth) 사용을 권장합니다. 이는 정기적인
보안 업데이트를 받습니다.

그렇지 않으면 최신 버전으로 신속하게 업데이트하는 프로세스를 설정하세요.
이 저장소를 팔로우하면 됩니다. 특히
[Releases](https://github.com/supabase/auth/releases) 및 [Security
Advisories](https://github.com/supabase/auth/security/advisories) 섹션을 확인하세요.

### 이전 버전과의 호환성

Auth는 [시맨틱 버저닝](https://semver.org) 체계를 사용합니다. 다음은
이전 버전과의 호환성 보장에 대한 추가 설명입니다.

**Go API 호환성**

Auth는 Go 라이브러리로 사용하기 위한 것이 아닙니다. 이렇게 사용하는 경우
어떤 버전 번호가 변경되더라도 이전 버전 API 호환성은  
보장되지 않습니다.

**패치**

패치 버전 변경은 다음 항목에 대한 이전 버전과의 호환성을 보장합니다:

- 데이터베이스 객체 (테이블, 컬럼, 인덱스, 함수).
- REST API
- JWT 구조
- 구성

보장되는 예:

- 컬럼의 유형은 변경되지 않습니다.
- 테이블의 기본 키는 변경되지 않습니다.
- 인덱스는 제거되지 않습니다.
- 고유성 제약 조건은 제거되지 않습니다.
- REST API는 제거되지 않습니다.
- REST API 매개변수는 이전과 동일하게 작동합니다 (버그가 수정된 경우에는 더 나을 수도
  있습니다).
- 구성은 변경되지 않습니다.

보장되지 않는 예:

- 테이블에 새 컬럼이 추가될 수 있습니다.
- 테이블의 컬럼 순서가 변경될 수 있습니다.
- 고유하지 않은 제약 조건은 제거될 수 있습니다 (데이터베이스 수준 검사, null, 기본
  값).
- JWT에 새 속성이 추가될 수 있습니다.

**마이너**

마이너 버전 변경은 다음 항목에 대한 이전 버전과의 호환성을 보장합니다:

- REST API
- JWT 구조
- 구성

이러한 보장에 대한 예외는 다른 방법으로 해결할 수 없는 심각한 보안 문제가
발견된 경우에만 적용됩니다.

보장되는 예:

- 기존 API는 더 이상 사용되지 않게 될 수 있지만 다음 몇 개의 마이너 버전 릴리스
  동안 계속 작동합니다.
- 구성 변경은 더 이상 사용되지 않게 될 수 있지만 다음 몇 개의
  마이너 버전 릴리스 동안 계속 작동합니다.
- 이미 발급된 JWT는 허용되지만, 새 JWT는 (보통은 유사한) 다른
  구조일 수 있습니다.

보장되지 않는 예:

- 사용 중단 공지 후 JWT 필드가 제거될 수 있습니다.
- 사용 중단 공지 후 특정 API가 제거될 수 있습니다.
- 사용 중단 공지 후 외부 공급자로 로그인하는 기능이 제거될 수 있습니다.
- 테이블, 인덱스, 뷰, 함수에 대한 삭제, 잘라내기, 중요한 스키마
  변경.

실행 로그에 사용 중단 공지를 최소 두 개의 메이저 버전 릴리스 동안 또는
여러 릴리스가 배포되는 경우 2주 동안 제공하는 것을 목표로 합니다. 공지가
유효한 동안에는 호환성이 보장됩니다.

**메이저**

메이저 버전 변경은 이전 버전과의 호환성을
보장하지 않습니다.

### 상속된 기능

Netlify 코드베이스에서 상속된 일부 기능은 Supabase에서 지원되지 않으며
향후 사전 공지 없이 제거될 수 있습니다. 다음은
해당 기능의 전체 목록입니다:

1. `instances` 테이블을 통한 멀티 테넌시, 즉 `GOTRUE_MULTI_INSTANCE_MODE`
   구성 매개변수.
2. 시스템 사용자 (zero UUID 사용자).
3. `is_super_admin` 컬럼을 통한 슈퍼 관리자.
4. `GOTRUE_JWT_ADMIN_GROUP_NAME` 및 기타 구성 필드를 통한 JWT의 그룹
   정보.
5. JWT 서명. Supabase Auth는 비대칭 키(기본적으로 RS256;
   선택적으로 ECC/Ed25519)를 지원합니다. HS256은 호환성을 위해 계속 지원되지만,
   더 쉬운 검증과
   교체를 위해 비대칭 키로 마이그레이션하는 것이 좋습니다. 향후 사용 중단은 변경 로그에서 공지됩니다. 자세한 내용은
   [JWT 서명 키](https://supabase.com/docs/guides/auth/signing-keys)와
   [JWTs 가이드](https://supabase.com/docs/guides/auth/jwts)를 참조하세요.

이 목록은 완전한 목록이 아니며 변경될 수 있습니다.

### 자체 호스팅 시 모범 사례

자체 호스팅 시 Auth와의 이전 버전 호환성을 보장하기 위해 따라야 할 몇 가지 모범
사례는 다음과 같습니다:

1. Auth가 관리하는 스키마를 수정하지 마세요. `migrations` 디렉토리에서 모든
   마이그레이션을 확인할 수 있습니다.
2. 데이터베이스의 스키마와 데이터 구조에 의존하지 마세요. 사용자 정보를 파악하려면
   항상 Auth API와 JWT를 사용하세요.
3. 항상 로드 밸런서, CDN, nginx 또는 이와 유사한 소프트웨어와 같은 TLS 지원
   프록시 뒤에서 Auth를 실행하세요.

## 구성

`.env`라는 구성 파일,
환경 변수, 또는 둘의 조합을 사용하여 Auth를 구성할 수 있습니다. 환경 변수는 `GOTRUE_` 접두사가 붙으며 항상 파일로 제공된 값보다 우선합니다.

### 최상위 수준```properties
GOTRUE_SITE_URL=https://example.netlify.com/
```
`SITE_URL` — `string` **필수**

사이트가 위치한 기본 URL입니다. 현재 다른 설정과 함께 이메일에서 사용되는 URL을 구성하는 데 사용됩니다. `SITE_URL`과 호스트를 공유하는 모든 URI는 `redirect_to` 매개변수에 허용되는 값입니다(`/authorize` 등 참조).

`URI_ALLOW_LIST` — `string`

유효한 `redirect_to` 대상으로 허용되는 URI 목록입니다. 쉼표로 구분합니다(예: `"https://foo.example.com,https://*.foo.example.com,https://bar.example.com"`). 기본값은 []입니다. 글롭(glob)을 통한 와일드카드 매칭을 지원합니다. 예를 들어 `https://*.foo.example.com`은 `https://a.foo.example.com` 및 `https://b.foo.example.com`을 허용합니다. 글롭은 하위 도메인에서도 지원됩니다. 예를 들어 `https://foo.example.com/*`은 `https://foo.example.com/page1` 및 `https://foo.example.com/page2`를 허용합니다.

보다 일반적인 글롭 패턴은 [다음 링크](https://pkg.go.dev/github.com/gobwas/glob#Compile)를 참조하세요.

`OPERATOR_TOKEN` — `string` _멀티 인스턴스 모드 전용_

이 마이크로서비스의 운영자(보통 Netlify)와 공유하는 비밀 키입니다. 요청이 운영자를 통해 프록시되었는지, 페이로드 값을 신뢰할 수 있는지 확인하는 데 사용됩니다.

`DISABLE_SIGNUP` — `bool`

가입이 비활성화되면 새 사용자를 만드는 유일한 방법은 초대를 통해서입니다. 기본값은 `false`이며 모든 가입이 활성화됩니다.

`GOTRUE_EXTERNAL_EMAIL_ENABLED` — `bool`

이메일 가입을 비활성화하려면 이 옵션을 사용하세요(사용자는 여전히 외부 OAuth 공급자를 통해 가입/로그인할 수 있습니다).

`GOTRUE_EXTERNAL_PHONE_ENABLED` — `bool`

전화 가입을 비활성화하려면 이 옵션을 사용하세요(사용자는 여전히 외부 OAuth 공급자를 통해 가입/로그인할 수 있습니다).

`GOTRUE_RATE_LIMIT_HEADER` — `string`

`/token` 엔드포인트에 대해 속도 제한을 적용할 헤더입니다. 이 헤더는 신뢰할 수 있는 업스트림 프록시(예: Kong 또는 Envoy)에 의해 설정될 것으로 예상됩니다. `x-forwarded-for`와 같은 헤더는 스푸핑이 가능하므로 클라이언트가 직접 제공할 때 속도 제한에 사용할 수 없습니다.

`GOTRUE_RATE_LIMIT_EMAIL_SENT` — `string`

다음 엔드포인트에서 시간당 전송되는 이메일 수를 제한합니다: `/signup`, `/invite`, `/magiclink`, `/recover`, `/otp`, `/user`.

`GOTRUE_PASSWORD_MIN_LENGTH` — `int`

최소 비밀번호 길이, 기본값은 6입니다.

`GOTRUE_PASSWORD_REQUIRED_CHARACTERS` — `:`로 구분된 문자 집합 문자열입니다. 비밀번호는 각 집합의 문자를 하나 이상 포함해야 승인됩니다. `:` 문자를 사용하려면 `\`로 이스케이프하세요.

`GOTRUE_SECURITY_REFRESH_TOKEN_ROTATION_ENABLED` — `bool`

리프레시 토큰 순환이 활성화되면 인증은 폐기된 리프레시 토큰을 재사용하려는 악의적인 시도를 자동으로 감지합니다. 악의적인 시도가 감지되면 GoTrue는 해당 토큰에서 파생된 모든 토큰을 즉시 폐기합니다.

`GOTRUE_SECURITY_REFRESH_TOKEN_REUSE_INTERVAL` — `string`

이 설정은 `GOTRUE_SECURITY_REFRESH_TOKEN_ROTATION_ENABLED`가 활성화된 경우에만 적용됩니다. 리프레시 토큰의 재사용 간격은 동시성 또는 오프라인 문제를 지원하기 위해 해당 간격 동안 리프레시 토큰을 여러 번 교환할 수 있게 합니다. 재사용 간격 동안 인증은 폐기된 토큰의 사용을 악의적인 시도로 간주하지 않고 단순히 하위 리프레시 토큰을 반환합니다.

이전에 폐기된 토큰만 재사용할 수 있습니다. 현재 유효한 리프레시 토큰보다 훨씬 이전의 오래된 리프레시 토큰을 사용하면 재사용 감지가 트리거됩니다.

### API```properties
GOTRUE_API_HOST=localhost
PORT=9999
API_EXTERNAL_URL=http://localhost:9999
```
`API_HOST` - `string`

수신 대기할 호스트 이름입니다.

`PORT` (접두사 없음) / `API_PORT` - `number`

수신 대기할 포트 번호입니다. 기본값은 `8081`입니다.

`API_ENDPOINT` - `string` _다중 인스턴스 모드 전용_

Netlify가 이 API에 액세스할 수 있는 엔드포인트를 제어합니다.

`API_EXTERNAL_URL` - `string` **필수**

GoTrue에 액세스할 수 있는 URL입니다.

`REQUEST_ID_HEADER` - `string`

들어오는 요청에서 요청 ID를 상속하려면 이 값에 해당 이름을 지정하세요.

### 데이터베이스```properties
GOTRUE_DB_DRIVER=postgres
DATABASE_URL=root@localhost/auth
```
`DB_DRIVER` - `string` **필수**

사용할 데이터베이스 방언을 선택합니다. 반드시 `postgres`여야 합니다.

`DATABASE_URL` (접두사 없음) / `DB_DATABASE_URL` - `string` **필수**

데이터베이스 연결 문자열입니다.

`GOTRUE_DB_MAX_POOL_SIZE` - `int`

데이터베이스에 대한 최대 열린 연결 수를 설정합니다. 기본값은 0이며, 이는 "무제한" 연결 수와 동일합니다.

`DB_NAMESPACE` - `string`

모든 테이블 이름에 접두사를 추가합니다.

**마이그레이션 참고 사항**

마이그레이션은 `./auth`를 실행할 때 자동으로 적용됩니다. 그러나 다음 방법을 통해 마이그레이션을 다시 실행할 수도 있습니다:

- 로컬에서 빌드한 경우: `./auth migrate`
- Docker 사용 시: `docker run --rm auth gotrue migrate`

### 로깅```properties
LOG_LEVEL=debug # available without GOTRUE prefix (exception)
GOTRUE_LOG_FILE=/var/log/go/auth.log
```
`LOG_LEVEL` - `string`

출력할 로그 수준을 제어합니다. `panic`, `fatal`, `error`, `warn`, `info`, `debug` 중에서 선택하세요. 기본값은 `info`입니다.

`LOG_FILE` - `string`

로그를 파일에 기록하려면 `log_file`을 유효한 파일 경로로 설정하세요.

### Observability

Auth에는 기본적인 관측 기능이 내장되어 있습니다. [OpenTelemetry](https://opentelemetry.io) 메트릭과 트레이스를 수집기로 내보낼 수 있습니다.

#### Tracing

트레이싱을 활성화하려면 다음 변수를 구성하세요:

`GOTRUE_TRACING_ENABLED` - `bool`

`GOTRUE_TRACING_EXPORTER` - `string` `opentelemetry`만 지원됩니다

수집기 또는 서비스에 대한 [OpenTelemetry Exporter](https://opentelemetry.io/docs/reference/specification/protocol/exporter/) 구성도 반드시 설정하세요.

예를 들어 [Honeycomb.io](https://docs.honeycomb.io/getting-data-in/opentelemetry/go-distro/#using-opentelemetry-without-the-honeycomb-distribution)를 사용한다면 다음 표준 OpenTelemetry OTLP 변수를 설정해야 합니다:```
OTEL_SERVICE_NAME=auth
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT=https://api.honeycomb.io:443
OTEL_EXPORTER_OTLP_HEADERS="x-honeycomb-team=<API-KEY>,x-honeycomb-dataset=auth"
```
#### 메트릭

메트릭을 활성화하려면 다음 변수를 구성하세요:

`GOTRUE_METRICS_ENABLED` - `boolean`

`GOTRUE_METRICS_EXPORTER` - `string`, `opentelemetry` 및 `prometheus`만
지원됩니다.

또한 [OpenTelemetry
Exporter](https://opentelemetry.io/docs/reference/specification/protocol/exporter/)
구성을 수집기 또는 서비스에 맞게 구성해야 합니다.

`prometheus` exporter를 사용하는 경우, 서버 호스트와 포트를 다음 표준
OpenTelemetry 변수로 구성할 수 있습니다:

`OTEL_EXPORTER_PROMETHEUS_HOST` - IP 주소, 기본값 `0.0.0.0`

`OTEL_EXPORTER_PROMETHEUS_PORT` - 포트 번호, 기본값 `9100`

메트릭은 서버의 `/` 경로에서 내보내집니다.

`opentelemetry` exporter를 사용하는 경우, 메트릭은
수집기로 푸시됩니다.

예를 들어,
[Honeycomb.io](https://docs.honeycomb.io/getting-data-in/opentelemetry/go-distro/#using-opentelemetry-without-the-honeycomb-distribution)
를 사용한다면 다음 표준 OpenTelemetry OTLP 변수를 설정해야 합니다:```
OTEL_SERVICE_NAME=auth
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT=https://api.honeycomb.io:443
OTEL_EXPORTER_OTLP_HEADERS="x-honeycomb-team=<API-KEY>,x-honeycomb-dataset=auth"
```
Honeycomb.io는 메트릭을 수집하려면 유료 플랜이 필요합니다.

추적 또는 메트릭이 푸시되지 않는 문제를 디버그해야 하는 경우에는
`DEBUG=true`로 설정하면 OpenTelemetry SDK에서 더 많은 정보를 얻을 수 있습니다.

#### 사용자 정의 리소스 속성

OpenTelemetry 추적 또는 메트릭 내보내기를 사용할 때 사용자 정의
리소스 속성을 [표준 `OTEL_RESOURCE_ATTRIBUTES` 환경
변수](https://opentelemetry.io/docs/reference/specification/resource/sdk/#specifying-resource-information-via-an-environment-variable).

기본 속성인 `auth.version`은 빌드 버전을 포함하여 제공됩니다.

#### HTTP 경로 추적

Auth API에 대한 모든 HTTP 호출은 추적됩니다. 경로는 매개변수화된
경로 버전을 사용하며, 경로 매개변수의 값은
`http.route.params.<route-key>` 스팬 속성에서 확인할 수 있습니다.

예를 들어, 다음 요청은:```
GET /admin/users/4acde936-82dc-4552-b851-831fb8ce0927/
```
다음과 같이 추적됩니다:```
http.method = GET
http.route = /admin/users/{user_id}
http.route.params.user_id = 4acde936-82dc-4552-b851-831fb8ce0927
```
#### Go 런타임 및 HTTP 메트릭

모든 Go 런타임 메트릭이 노출됩니다. 일부 HTTP 메트릭도 기본적으로
수집됩니다.

### JSON 웹 토큰 (JWT)```properties
GOTRUE_JWT_SECRET=supersecretvalue
GOTRUE_JWT_EXP=3600
GOTRUE_JWT_AUD=netlify
```
`JWT_SECRET` - `string` **required**

JWT 토큰 서명에 사용되는 비밀 키입니다.

`JWT_EXP` - `number`

토큰이 유효한 시간(초)입니다. 기본값은 3600(1시간)입니다.

`JWT_AUD` - `string`

기본 JWT 대상(audience)입니다. 대상을 사용하여 사용자를 그룹화하세요.

`JWT_ADMIN_GROUP_NAME` - `string`

관리자 그룹의 이름입니다(활성화된 경우). 기본값은 `admin`입니다.

`JWT_DEFAULT_GROUP_NAME` - `string`

모든 새 사용자에게 할당할 기본 그룹입니다.

### 외부 인증 제공자

외부 인증을 위해 `apple`, `azure`, `bitbucket`, `discord`, `facebook`, `figma`, `github`, `gitlab`, `google`, `keycloak`, `linkedin`, `notion`, `snapchat`, `spotify`, `slack`, `twitch`, `twitter`, `workos`를 지원합니다.

각각을 별도로 구성하려면 `external` 아래의 키로 이름을 사용하세요.```properties
GOTRUE_EXTERNAL_GITHUB_ENABLED=true
GOTRUE_EXTERNAL_GITHUB_CLIENT_ID=myappclientid
GOTRUE_EXTERNAL_GITHUB_SECRET=clientsecretvaluessssh
GOTRUE_EXTERNAL_GITHUB_REDIRECT_URI=http://localhost:3000/callback
```
외부 공급자는 필수가 아니지만, 활성화하려면 필요한 값을 반드시 입력해야 합니다.

`EXTERNAL_X_ENABLED` - `bool`

이 외부 공급자가 활성화되어 있는지 여부

`EXTERNAL_X_CLIENT_ID` - `string` **필수**

외부 공급자에 등록된 OAuth2 클라이언트 ID입니다.

`EXTERNAL_X_SECRET` - `string` **필수**

등록 시 외부 공급자가 제공한 OAuth2 클라이언트 시크릿입니다.

`EXTERNAL_X_REDIRECT_URI` - `string` **필수**

OAuth2 공급자가 `code` 및 `state` 값을 포함해 리디렉션할 URI입니다.

`EXTERNAL_X_URL` - `string`

권한 부여 및 액세스 토큰을 요청하는 URL을 구성하는 데 사용되는 기본 URL입니다. `gitlab` 및 `keycloak`에서 사용됩니다. `gitlab`의 경우 기본값은 `https://gitlab.com`입니다. `keycloak`의 경우 이 값을 인스턴스로 설정해야 합니다. 예: `https://keycloak.example.com/realms/myrealm`

#### 네트워크 강화

외부 인증 공급자를 구성하면 Auth가 해당 공급자의 권한 부여, 토큰 및 userinfo 엔드포인트로 아웃바운드 HTTP 요청을 보내게 됩니다. `GOTRUE_EXTERNAL_*` 설정 또는 관리자 API를 통해 공급자를 구성하는 것은 관리 작업이며, 이는 연결될 호스트와 URL을 신뢰한다는 의미입니다.

Auth가 실행되는 네트워크는 강화되어야 하며, 이러한 아웃바운드 연결이 `localhost`/루프백 주소나 클라우드 메타데이터 엔드포인트(예: `169.254.169.254`)와 같이 노출하지 않으려는 내부 전용 리소스에 도달할 수 없도록 해야 합니다. 이는 관리자가 구성하거나 검색 가능한 엔드포인트가 있는 공급자(예: 사용자 지정 OAuth/OIDC 공급자)에서 가장 중요합니다. 잘못 구성되었거나 악의적인 URL이 내부 인프라에 도달하는 데 사용될 수 있기 때문입니다.

#### Apple OAuth

Apple을 통한 외부 인증을 로컬에서 시도하려면 다음을 수행해야 합니다.

1. `/etc/hosts` 구성에서 localhost를 \<my_custom_dns \>로 매핑하세요.
2. [api.go](https://github.com/supabase/auth/blob/master/internal/api/api.go)에서 `ListenAndServe`를 다음으로 교체하여 localhost에서 HTTPS 트래픽을 제공하도록 auth를 구성하세요.   ```
      func (a *API) ListenAndServe(hostAndPort string) {
        log := logrus.WithField("component", "api")
        path, err := os.Getwd()
        if err != nil {
          log.Println(err)
        }
        server := &http.Server{
          Addr:    hostAndPort,
          Handler: a.handler,
        }
        done := make(chan struct{})
        defer close(done)
        go func() {
          waitForTermination(log, done)
          ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
          defer cancel()
          server.Shutdown(ctx)
        }()
        if err := server.ListenAndServeTLS("PATH_TO_CRT_FILE", "PATH_TO_KEY_FILE"); err != http.ErrServerClosed {
          log.WithError(err).Fatal("http server listen failed")
        }
    }
   ```
3. crt 및 key 파일을 생성합니다. 자세한 내용은 [여기](https://www.freecodecamp.org/news/how-to-get-https-working-on-your-local-development-environment-in-5-minutes-7af615770eec/)를 참조하세요.
4. 이 [게시물](https://medium.com/identity-beyond-borders/how-to-configure-sign-in-with-apple-77c61e336003)을 따라 `GOTRUE_EXTERNAL_APPLE_SECRET`을 생성하세요!

### 이메일

이메일 전송은 필수가 아니지만, 비밀번호 복구를 위해 적극 권장됩니다.
활성화된 경우 아래의 필수 값을 제공해야 합니다.```properties
GOTRUE_SMTP_HOST=smtp.mandrillapp.com
GOTRUE_SMTP_PORT=587
[email protected]
GOTRUE_SMTP_PASS=correcthorsebatterystaple
[email protected]
GOTRUE_MAILER_SUBJECTS_CONFIRMATION="Please confirm"
```
`SMTP_ADMIN_EMAIL` - `string` **required**

보내는 모든 이메일의 `From` 이메일 주소입니다.

`SMTP_HOST` - `string` **required**

이메일을 전송할 메일 서버 호스트 이름입니다.

`SMTP_PORT` - `number` **required**

메일 서버에 연결할 포트 번호입니다.

`SMTP_USER` - `string`

메일 서버에서 인증이 필요한 경우 사용할 사용자 이름입니다.

`SMTP_PASS` - `string`

메일 서버에서 인증이 필요한 경우 사용할 비밀번호입니다.

`SMTP_MAX_FREQUENCY` - `number`

가입 확인 또는 비밀번호 재설정 이메일을 보내기 전에 반드시 경과해야 하는 최소 시간을 제어합니다. 값은 초 단위입니다. 기본값은 900(15분)입니다.

`SMTP_SENDER_NAME` - `string`

보낸 사람 이름을 설정합니다. 사용하지 않으면 기본값은 `SMTP_ADMIN_EMAIL`입니다.

`MAILER_AUTOCONFIRM` - `bool`

이메일 확인이 필요하지 않은 경우 이 값을 `true`로 설정할 수 있습니다. 기본값은 `false`입니다.

`MAILER_OTP_EXP` - `number`

이메일 링크 또는 OTP가 유효한 기간을 제어합니다.

`MAILER_URLPATHS_INVITE` - `string`

사용자 초대 이메일에서 사용할 URL 경로입니다. 기본값은 `/verify`입니다.

`MAILER_URLPATHS_CONFIRMATION` - `string`

가입 확인 이메일에서 사용할 URL 경로입니다. 기본값은 `/verify`입니다.

`MAILER_URLPATHS_RECOVERY` - `string`

비밀번호 재설정 이메일에서 사용할 URL 경로입니다. 기본값은 `/verify`입니다.

`MAILER_URLPATHS_EMAIL_CHANGE` - `string`

이메일 변경 확인 이메일에서 사용할 URL 경로입니다. 기본값은 `/verify`입니다.

`MAILER_SUBJECTS_INVITE` - `string`

사용자 초대에 사용할 이메일 제목입니다. 기본값은 `You've been invited`입니다.

`MAILER_SUBJECTS_CONFIRMATION` - `string`

가입 확인에 사용할 이메일 제목입니다. 기본값은 `Confirm your email address`입니다.

`MAILER_SUBJECTS_RECOVERY` - `string`

비밀번호 재설정에 사용할 이메일 제목입니다. 기본값은 `Reset your password`입니다.

`MAILER_SUBJECTS_MAGIC_LINK` - `string`

매직 링크 이메일에 사용할 이메일 제목입니다. 기본값은 `Your sign-in link`입니다.

`MAILER_SUBJECTS_EMAIL_CHANGE` - `string`

이메일 변경 확인에 사용할 이메일 제목입니다. 기본값은 `Confirm your new email address`입니다.

`MAILER_SUBJECTS_REAUTHENTICATION` - `string`

재인증에 사용할 이메일 제목입니다. 기본값은 `{{ .Token }} is your verification code`입니다.

`MAILER_SUBJECTS_PASSWORD_CHANGED_NOTIFICATION` - `string`

비밀번호 변경 알림에 사용할 이메일 제목입니다. 기본값은 `Your password was changed`입니다.

`MAILER_SUBJECTS_EMAIL_CHANGED_NOTIFICATION` - `string`

이메일 변경 알림에 사용할 이메일 제목입니다. 기본값은 `Your email address was changed`입니다.

`GOTRUE_MAILER_SUBJECTS_PHONE_CHANGED_NOTIFICATION` - `string`

전화번호 변경 알림에 사용할 이메일 제목입니다. 기본값은 `Your phone number was changed`입니다.

`GOTRUE_MAILER_SUBJECTS_IDENTITY_LINKED_NOTIFICATION` - `string`

ID 연결 알림에 사용할 이메일 제목입니다. 기본값은 `A new sign-in method was linked to your account`입니다.

`GOTRUE_MAILER_SUBJECTS_IDENTITY_UNLINKED_NOTIFICATION` - `string`

ID 연결 해제 알림에 사용할 이메일 제목입니다. 기본값은 `A sign-in method was removed from your account`입니다.

`GOTRUE_MAILER_SUBJECTS_MFA_FACTOR_ENROLLED_NOTIFICATION` - `string`

인증 수단 추가 알림에 사용할 이메일 제목입니다. 기본값은 `A new verification method was added to your account`입니다.

`GOTRUE_MAILER_SUBJECTS_MFA_FACTOR_UNENROLLED_NOTIFICATION` - `string`

인증 수단 제거 알림에 사용할 이메일 제목입니다. 기본값은 `A verification method was removed from your account`입니다.

`MAILER_TEMPLATES_INVITE` - `string`

사용자를 초대할 때 사용할 이메일 템플릿의 URL 경로입니다. (예: `https://www.example.com/path-to-email-template.html`)
`SiteURL`, `Email`, `ConfirmationURL` 변수를 사용할 수 있습니다.

기본 콘텐츠(템플릿을 사용할 수 없는 경우):```html
<h2>You've been invited</h2>

<p>You've been invited to create an account. Follow the link below to accept.</p>
<p><a href="https://github.com/supabase/auth/blob/master/%7B%7B%20.ConfirmationURL%20%7D%7D">Accept invitation</a></p>
```
`MAILER_TEMPLATES_CONFIRMATION` - `string`

가입 확인 시 사용할 이메일 템플릿의 URL 경로입니다. (예: `https://www.example.com/path-to-email-template.html`)
`SiteURL`, `Email`, `ConfirmationURL` 변수를 사용할 수 있습니다.

기본 콘텐츠(템플릿을 사용할 수 없는 경우):```html
<h2>Confirm your email address</h2>

<p>Follow the link below to confirm this email address and finish signing up.</p>
<p><a href="https://github.com/supabase/auth/blob/master/%7B%7B%20.ConfirmationURL%20%7D%7D">Confirm email address</a></p>
```
`MAILER_TEMPLATES_RECOVERY` - `string`

비밀번호 재설정 시 사용할 이메일 템플릿의 URL 경로입니다. (예: `https://www.example.com/path-to-email-template.html`)
`SiteURL`, `Email`, `ConfirmationURL` 변수를 사용할 수 있습니다.

기본 콘텐츠(템플릿을 사용할 수 없는 경우):```html
<h2>Reset your password</h2>

<p>We received a request to reset your password. Follow the link below to choose a new one.</p>
<p><a href="https://github.com/supabase/auth/blob/master/%7B%7B%20.ConfirmationURL%20%7D%7D">Reset password</a></p>
<p>If you didn't request this, you can safely ignore this email.</p>
```
`MAILER_TEMPLATES_MAGIC_LINK` - `string`

매직 링크를 보낼 때 사용할 이메일 템플릿의 URL 경로입니다. (예: `https://www.example.com/path-to-email-template.html`)
`SiteURL`, `Email`, `ConfirmationURL` 변수를 사용할 수 있습니다.

기본 콘텐츠(템플릿을 사용할 수 없는 경우):```html
<h2>Your sign-in link</h2>

<p>Follow the link below to sign in. This link expires shortly and can only be used once.</p>
<p><a href="https://github.com/supabase/auth/blob/master/%7B%7B%20.ConfirmationURL%20%7D%7D">Sign in</a></p>
```
`MAILER_TEMPLATES_EMAIL_CHANGE` - `string`

이메일 주소 변경을 확인할 때 사용할 이메일 템플릿의 URL 경로입니다. (예: `https://www.example.com/path-to-email-template.html`)
`SiteURL`, `Email`, `NewEmail`, `ConfirmationURL` 변수를 사용할 수 있습니다.

기본 콘텐츠(템플릿을 사용할 수 없는 경우):```html
<h2>Confirm your new email address</h2>

<p>Follow the link below to confirm {{ .NewEmail }} as your new email address.</p>
<p><a href="https://github.com/supabase/auth/blob/master/%7B%7B%20.ConfirmationURL%20%7D%7D">Confirm new email address</a></p>
<p>If you didn't request this change, you can safely ignore this email.</p>
```
`MAILER_TEMPLATES_REAUTHENTICATION` - `string`

사용자를 재인증할 때 사용할 이메일 템플릿의 URL 경로입니다. (예: `https://www.example.com/path-to-email-template.html`)
`Token` 변수를 사용할 수 있습니다.

기본 콘텐츠(템플릿을 사용할 수 없는 경우):```html
<h2>Your verification code</h2>

<p>Use the code below to verify your identity. It expires shortly.</p>
<p>{{ .Token }}</p>
```
`MAILER_TEMPLATES_PASSWORD_CHANGED_NOTIFICATION` - `string`

사용자의 비밀번호가 변경되었음을 알릴 때 사용할 이메일 템플릿의 URL 경로입니다. (예: `https://www.example.com/path-to-email-template.html`)
`Email` 변수를 사용할 수 있습니다.

기본 콘텐츠(템플릿을 사용할 수 없는 경우):```html
<h2>Your password was changed</h2>

<p>The password for your account was recently changed.</p>
<p>If you didn't make this change, reset your password and contact support immediately.</p>
```
`GOTRUE_MAILER_NOTIFICATIONS_PASSWORD_CHANGED_ENABLED` - `bool`

사용자의 비밀번호가 변경될 때 알림 이메일을 보낼지 여부입니다. 기본값은 `false`입니다.

`MAILER_TEMPLATES_EMAIL_CHANGED_NOTIFICATION` - `string`

사용자의 이메일이 변경되었음을 알릴 때 사용할 이메일 템플릿의 URL 경로입니다. (예: `https://www.example.com/path-to-email-template.html`)
`Email` 및 `OldEmail` 변수를 사용할 수 있습니다.

기본 콘텐츠(템플릿을 사용할 수 없는 경우):```html
<h2>Your email address was changed</h2>

<p>The email address for your account was changed from {{ .OldEmail }} to {{ .Email }}.</p>
<p>If you didn't make this change, contact support immediately.</p>
```
`GOTRUE_MAILER_NOTIFICATIONS_EMAIL_CHANGED_ENABLED` - `bool`

사용자의 이메일이 변경될 때 알림 이메일을 보낼지 여부입니다. 기본값은 `false`입니다.

`GOTRUE_MAILER_TEMPLATES_PHONE_CHANGED_NOTIFICATION` - `string`

사용자의 전화번호가 변경되었음을 알릴 때 사용할 이메일 템플릿의 URL 경로입니다. (예: `https://www.example.com/path-to-email-template.html`)
`Email`, `Phone`, `OldPhone` 변수를 사용할 수 있습니다.

기본 콘텐츠(템플릿을 사용할 수 없는 경우):```html
<h2>Your phone number was changed</h2>

<p>The phone number for your account was changed from {{ .OldPhone }} to {{ .Phone }}.</p>
<p>If you didn't make this change, contact support immediately.</p>
```
`GOTRUE_MAILER_NOTIFICATIONS_PHONE_CHANGED_ENABLED` - `bool`

사용자의 전화번호가 변경될 때 알림 이메일을 보낼지 여부입니다. 기본값은 `false`입니다.

`GOTRUE_MAILER_TEMPLATES_IDENTITY_LINKED_NOTIFICATION` - `string`

로그인 방법이 사용자의 계정에 연결되었음을 사용자에게 알릴 때 사용할 이메일 템플릿의 URL 경로입니다. (예: `https://www.example.com/path-to-email-template.html`)
`Email` 및 `Provider` 변수를 사용할 수 있습니다.

기본 콘텐츠(템플릿을 사용할 수 없는 경우):```html
<h2>A new sign-in method was linked</h2>

---

[Read more](https://github.com/supabase/auth)
도구 다운로드