{
"$type": "site.standard.document",
"canonicalUrl": "https://blog.nove-b.dev//posts/create-registration-webapi-jwt-authentication-golang",
"path": "/posts/create-registration-webapi-jwt-authentication-golang",
"publishedAt": "2023-12-20T00:00:00.000Z",
"site": "at://did:plc:2atly2y5kfyjcj5zap6pv4wd/site.standard.publication/3mmxeqr2tcb2k",
"tags": [
"api",
"go",
"jwt",
"認証"
],
"textContent": "期待するもの\n\n新規登録のAPIを作成したので、次はログイン機能を作成したい。\n\nログインは、メールアドレスとパスワードを送り一致したら、tokenを取得する。\n\nで、tokenを使って認証付きのAPIを叩けるようになりたい。\n\ntokenにはjwtを使用する。\n\njwtってなに?\n\nこれはどこかで調べてまとめる(気が向いた時)。\n\nJWT認証を作成する\n\nパッケージのインストール\n\ngithub.com/dgrijalva/jwt-goパッケージの情報が多かったので、それに従うことにする。長い物には巻かれるべきで間違いない。\n\nパッケージをインストールする。\n\nTokenを生成する\n\nまずjwt.goというファイルを作成する。\n\n今回はauthフォルダの中に作成した。\n\nそれでは書いていく。\n\nまずは、jwtを生成するためのシークレットキーを作成する。\n\nここでは任意の文字列(今回は\"your_secret_key\")をバイト列に変換し、jwtKeyに代入している。\n\nバイト列というのがピンとこないので、\n\nfmt.Printlnで書き出しみると、[121 111 117 114 95 115 101 99 114 101 116 95 107 101 121]となった。なんとなく理解した。\n\n> このようにして文字列をバイト列に変換することは、多くの場面でデータの操作や処理に利用されます。JWTの署名などのセキュリティ関連の操作では、シークレットキーをバイト列として扱うことが一般的です。\n\nとのことでした。\n\n次に、JWTのクレームを表す構造体であるClaimsを定義する。\n\nこれは任意のJSONデータっていう意味っぽい。\n\n今回はnameを含めることにする。\n\nと思ったけど、ユニークで必要がありそうなので、ユーザーIDにした。\n\n下記のように変更する。\n\n次に、Tokenを作成する関数を作成する。\n\nコードの詳細はコメントアウトに書いた。\n\nこれでTokenを作成することができた。\n\nログイン時にこのTokenを返却することにする。\n\nTokenを認証する\n\n次に認証を行う関数を作成する。\n\nちなみにこの関数の関数名が大文字始まりなのは下記の通り。\n\n> Go言語では、関数や変数が大文字で始まる場合には他のパッケージから参照可能(エクスポート可能)となりますが、小文字で始まる場合には同じパッケージ内からのみアクセス可能となります。\n\nで、このコントローラーを下記のように噛ませる。\n\nこれで認証が必要になった。\n\n実際に叩くときは\n\nこんな感じでヘッダーを持たせる必要がある。\n\nこれでJWT認証ができるようになった。",
"title": "Go Langで新規登録のWebAPIを作成したので、認証周りをJWTで作成する。"
}