> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nora.my/llms.txt
> Use this file to discover all available pages before exploring further.

# nora auth

> 로그인, 워크스페이스 전환, 토큰 관리

`auth` 서브커맨드가 로컬 자격증명과, 이후 명령이 동작할 워크스페이스를 관리. 로그인은 OAuth 기반이고, CLI가 OS 설정 디렉터리 아래에 사용자별 토큰을 저장.

## 명령

| 명령                            | 설명                      |
| ----------------------------- | ----------------------- |
| `auth login`                  | OAuth 로그인을 위해 브라우저 열기.  |
| `auth logout`                 | 로컬 자격증명 삭제.             |
| `auth status`                 | 활성 워크스페이스와 토큰 요약 표시.    |
| `auth workspaces list`        | 속한 모든 워크스페이스 나열.        |
| `auth workspaces switch <id>` | 활성 워크스페이스 변경.           |
| `auth workspaces current`     | 활성 워크스페이스 ID 표시(스크립트용). |

## `auth login`

```bash theme={null}
nora auth login
```

OAuth를 위해 브라우저 창이 열림. 성공하면:

* 워크스페이스 목록을 가져옴.
* 아직 없으면 첫 것을 활성으로 고정.
* OS 설정 위치에 자격증명을 씀:
  * macOS: `~/Library/Application Support/nora/credentials.json`
  * Linux: `~/.config/nora/credentials.json`
  * Windows: `%APPDATA%\nora\credentials.json`

자격증명 파일은 chmod 0600(여러분만 읽기). 절대 커밋하거나 공유하지 않음.

터미널에 브라우저가 없으면(SSH, 컨테이너) CLI가 로컬 브라우저에 붙여 넣을 URL을 표시. 돌아온 코드를 터미널에 붙임.

## `auth logout`

```bash theme={null}
nora auth logout
```

로컬 자격증명 파일을 삭제. **서버 쪽 토큰은 안 거둠.** 거두려면 앱을 씀. **Settings → Personal Access Tokens → Revoke**.

공유 머신에서 로그인한 뒤에 좋음.

## `auth status`

```bash theme={null}
nora auth status
```

이렇게 표시:

* 활성 워크스페이스 이름과 ID.
* 저장된 모든 워크스페이스(이름 + ID + 역할).
* 토큰(가려져서 prefix만).
* 가리키는 서버 URL.

뭔가 이상하다 싶을 때 처음 쓰기 좋은 명령. *어느* 워크스페이스가 활성이고 CLI가 *어느* 서버와 통신하는지 확인.

## `auth workspaces list`

```bash theme={null}
nora auth workspaces list
```

서버에서 워크스페이스 목록을 새로 가져옴(오프라인이면 캐시로 폴백). 항목마다 역할(`owner` / `manager` / `member`)을 표시해, 파괴적 명령을 돌리기 전에 권한을 알 수 있음.

## `auth workspaces switch <id>`

```bash theme={null}
nora auth workspaces switch acme-prod
```

활성 워크스페이스를 설정. 다시 전환할 때까지 이후 명령이 여기에 동작.

전환 없이 명령마다 덮어쓸 수도 있음:

```bash theme={null}
nora --workspace acme-staging flows list
```

## `auth workspaces current`

```bash theme={null}
nora auth workspaces current
```

활성 워크스페이스 ID만 표시. 셸 스크립트에 좋음:

```bash theme={null}
WS=$(nora auth workspaces current)
echo "Deploying to $WS"
```

## 한 머신에 여러 계정

CLI는 활성 자격증명 한 벌을 저장. 다른 계정을 쓰려면:

```bash theme={null}
NORA_TOKEN=$OTHER_ACCOUNT_TOKEN nora flows list
```

또는 `NORA_CONFIG_DIR`를 가리켜 자격증명 파일을 여러 벌 유지:

```bash theme={null}
NORA_CONFIG_DIR=~/.nora-dev nora auth login    # 한 정체성으로 로그인
NORA_CONFIG_DIR=~/.nora-prod nora auth login   # 다른 정체성으로 따로 로그인
```

빠른 전환용 alias:

```bash theme={null}
alias nora-dev='NORA_CONFIG_DIR=~/.nora-dev nora'
alias nora-prod='NORA_CONFIG_DIR=~/.nora-prod nora'
```

## 개인 토큰과 워크스페이스 토큰

두 토큰 다 됨:

| 토큰 종류         | 오는 곳                               | 스코프           | 잘 맞는 곳     |
| ------------- | ---------------------------------- | ------------- | ---------- |
| **개인 접근 토큰**  | `auth login`이나 앱 UI                | 속한 어느 워크스페이스든 | 인터랙티브 사용   |
| **워크스페이스 토큰** | 앱: **Settings → Workspace Tokens** | 워크스페이스 하나에 고정 | CI/CD, 자동화 |

CI에는 워크스페이스 토큰이 맞음. 엉뚱한 워크스페이스에 실수로 동작하지 않고, 하나를 거둬도 사용자가 앱에서 로그아웃되지 않음.

CI는 `NORA_TOKEN`을 시크릿으로 설정:

```yaml theme={null}
env:
  NORA_TOKEN: ${{ secrets.NORA_CI_TOKEN }}
```

`auth login`이 필요 없음. CLI가 `NORA_TOKEN`을 알아서 집어옴.

## 토큰 수명

* **개인 접근 토큰**: 거둘 때까지 유효. 쓰면 자동으로 새로 고침.
* **워크스페이스 토큰**: 거두거나 워크스페이스를 지울 때까지 유효.

CLI의 status 출력이 토큰 발급 시각을 표시해, 오래된 토큰을 돌릴 수 있음.

## 문제 해결

**"Not authenticated"** `auth login`을 실행하거나 `NORA_TOKEN`을 설정.

**"Wrong workspace"** `auth status`로 활성 워크스페이스를 보고, `auth workspaces switch`로 고침.

**"유효한 토큰인데 서버가 401"** UI에서 토큰이 거둬짐. `auth login`을 다시 실행.

**기업 프록시가 OAuth를 막음** `auth login` 전에 `HTTPS_PROXY=http://your-proxy:port`를 설정.
