JSON Web Tokenを返すGolang Serverを実装してみた
タイトルにあるように、JSON Web Tokenを返すGolang Serverを実装してみました。
認証が必要なAPIがあり、そのAPIのみTokenの検証を行なった後にアクセス可能にするケースを想定しています。
とは言っても、基本的には
Authentication in Golang with JWTs
を写経しています。
参考にしたサイトではWeb側の画面なども実装していますが、私の方は認証周り、Token周りを知りたかっただけなので
以下のような変更を加えました。
- 画面はindex.htmlのみ
- Tokenを取得するAPI(get-token)は固定のユーザー名、パスワードでBasic認証を行う
- Tokenの判定についてはvalidateToken()という関数にて行うように変更
ソースは以下になります。
GitHub - SrcHndWng/go-learning-webapp-auth
使い方はREADMEにも記述しましたが、バイナリを実行したら以下のようなcurlで叩くことができます。
$ curl -v http://localhost:8080/status # APIのステータス確認 $ curl -v http://localhost:8080/products # Tokenを渡していないためエラー $ curl -u username:password -v http://localhost:8080/get-token # Tokenの取得。username、passwordは固定。 $ TOKEN=上記で取得したトークン $ curl -v http://localhost:8080/products -H "Authorization: $TOKEN"
ポイントとなるのは、Token周り、Basic認証を実装しているauth/login.goとauth/token.goです。
Tokenを取得する際のBasic認証はlogin.goのLogin()にて、Tokenの検証はtoken.goのValidateToken()にて実装してあります。