# API Auth
## 認証と認可
- 認証
- Authentication
- AuthN
- 401 Unauthorized
- The request requires user authentication
- 認可
- Authorization
- AuthZ
- 403 Forbidden
- The server understood the request, but is refusing to full fill it
## Cookies
- HttpOnly: `true`
- vs. XSS
- Secure: `true`
- SameSite: ?
## JWT and Opaque Token
- [[JWT]]
- 非 Opaque Token の一種
- 中身を読める
- Opaque Token
- 中身が読めない
## Preflight request
## CORS
## CSRF token
> [!warning] Same-Origin Policy はクロスドメインのレスポンスをブラウザが読み取らせないようにしているだけで、リクエスト自体は API に到達している。
- 復号できない方式で暗号化
## Refresh token
- cookie に path 属性をつけて `/refresh` などの時のみ送信するなど
## Patterns
session store
- database
- Redis など
- client は session id を保存
- client
- Rails だと cookie store
- JWT
restrict origin
- CROS
- CSRF token
- cookie SameSite: strict
- SPA と API が同一 origin
client-side storage
- localStorage
- XSS
- cookies
- CSRF
- Size limit
### client only のデメリット
- server-side で session を invoke できない
- 適当な文字列
- cookie の場合はサイズ制限
## WARNING
- origin は改ざん可能
- referer は改ざん可能