CORS
同一オリジンあるいは特別に許可しているオリジン(ローカル開発用)以外のオリジンからはリクエストを許可していません。
CSRFトークン
「RFCで定められている安全」なメソッド(本サービスではGET)以外のリクエストは全て X-CSRF-Token
ヘッダにCSRFトークンを格納する必要があります。秘密鍵を使って、CSRF
CSRFトークンは /csrf-token GET
で取得可能です。
有効期限は24時間です。
gorilla/csrf を使用しています。
ID Token
ID Tokenは、本人であることを証明するトークンです。XSS対策として、Cookieに保存されてリクエストされることを想定しています。OpenIDConnectのID Tokenとは異なるものです。
トークンの生成と検証には、 jwt-go を使用しています。
トークンの中身
HS256
claim
トークンの生成
秘密鍵を使って、上記内容からトークンを生成する。
トークンの検証
- Cookieの
id_token
プロパティに格納された値を取り出し、秘密鍵で検証できるかを確認する。
- 有効期限を確認する。
Development tips
Launch servers in local
$ ./serverrun.sh
# go run main.go
If listen tcp :80: bind: address already in use exit status 1
happens, try below.
On app
# lsof -i:80 -P
# kill -9 <process>
UT
$ make test
Generate OpenAPI models
$ make openapi
Access log
example
{"severity":"INFO","timestamp":"2021-06-13T12:06:35.760+0900","message":"","http_request":{"status":200,"method":"POST","host":"localhost:80","path":"/login","query":"","request_size":56,"remote_address":"172.22.0.1:35924","x_forwarded_for":"","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36","referer":"http://localhost:3000/","protocol":"HTTP/1.1","latency":"20.6025ms"}}
Be careful
It is impossible to request APIs in local by curl or tools because of Forbidden - CSRF token invalid
.
Use frontend.