Go Langで新規登録のWebAPIを作成したので、認証周りをJWTで作成する。

nove-b December 20, 2023
Source

期待するもの

新規登録のAPIを作成したので、次はログイン機能を作成したい。

ログインは、メールアドレスとパスワードを送り一致したら、tokenを取得する。

で、tokenを使って認証付きのAPIを叩けるようになりたい。

tokenにはjwtを使用する。

jwtってなに?

これはどこかで調べてまとめる(気が向いた時)。

JWT認証を作成する

パッケージのインストール

github.com/dgrijalva/jwt-goパッケージの情報が多かったので、それに従うことにする。長い物には巻かれるべきで間違いない。

パッケージをインストールする。

Tokenを生成する

まずjwt.goというファイルを作成する。

今回はauthフォルダの中に作成した。

それでは書いていく。

まずは、jwtを生成するためのシークレットキーを作成する。

ここでは任意の文字列(今回は"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データっていう意味っぽい。

今回はnameを含めることにする。

と思ったけど、ユニークで必要がありそうなので、ユーザーIDにした。

下記のように変更する。

次に、Tokenを作成する関数を作成する。

コードの詳細はコメントアウトに書いた。

これでTokenを作成することができた。

ログイン時にこのTokenを返却することにする。

Tokenを認証する

次に認証を行う関数を作成する。

ちなみにこの関数の関数名が大文字始まりなのは下記の通り。

Go言語では、関数や変数が大文字で始まる場合には他のパッケージから参照可能(エクスポート可能)となりますが、小文字で始まる場合には同じパッケージ内からのみアクセス可能となります。

で、このコントローラーを下記のように噛ませる。

これで認証が必要になった。

実際に叩くときは

こんな感じでヘッダーを持たせる必要がある。

これでJWT認証ができるようになった。

Discussion in the ATmosphere

Loading comments...