ソースコードから理解する技術-UnderSourceCode

手を動かす(プログラムを組む)ことで技術を理解するブログ

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()にて実装してあります。