Go Langで新規登録のWebAPIを作成したので、認証周りをJWTで作成する。
期待するもの 新規登録のAPIを作成したので、次はログイン機能を作成したい。 ログインは、メールアドレスとパスワードを送り一致したら、tokenを取得する。 で、tokenを使って認証付きのAPIを叩けるようになりたい。 tokenにはjwtを使用する。 jwtってなに? これはどこかで調べてまとめる(気が向いた時)。 JWT認証を作成する パッケージのインストール github.com/dgrijalva/jwt-goパッケージの情報が多かったので、それに従うことにする。長い物には巻かれるべきで間違いない。 go get github.com/dgrijalva/jwt-go パッケージをインストールする。 Tokenを生成する まずjwt.goというファイルを作成する。 今回はauthフォルダの中に作成した。 それでは書いていく。 まずは、jwtを生成するためのシークレットキーを作成する。 var jwtKey = []byte("your_secret_key") ここでは任意の文字列(今回は"your_secret_key")をバイト列に変換し、jwtKeyに代入している。 バイト列というのがピンとこないので、 fmt.Printlnで書き出しみると、[121 111 117 114 95 115 101 99 114 101 116 95 107 101 121]となった。なんとなく理解した。 このようにして文字列をバイト列に変換することは、多くの場面でデータの操作や処理に利用されます。JWTの署名などのセキュリティ関連の操作では、シークレットキーをバイト列として扱うことが一般的です。 とのことでした。 次に、JWTのクレームを表す構造体であるClaimsを定義する。 これは任意のJSONデータっていう意味っぽい。 type Claims struct { Name string `json:"name"` jwt.StandardClaims } 今回はnameを含めることにする。 と思ったけど、ユニークで必要がありそうなので、ユーザーIDにした。 下記のように変更する。 type Claims struct { UserID uint `json:"user_id"` jwt.StandardClaims } 次に、Tokenを作成する関数を作成する。 コードの詳細はコメントアウトに書いた。 func generateToken(userId uint) (string, error) { // トークンの有効期限を設定(この場合は15分) expirationTime := time....