📑

Auth0を使用した認証について

に公開

Goでは、以下のパッケージを使うことで、APIサーバー内での処理が可能。

https://pkg.go.dev/github.com/MicahParks/keyfunc

  • JWKSの取得を行う。
  • 取得した公開鍵はAPIサーバー内でキャッシュでき、定期的なリフレッシュの間隔やJWKS取得時のHTTPタイムアウト時間を設定可能。
  • またdos対策で、rateパッケージと組み合わせて、JWKSの取得を⚪︎分間に1回など制限することができる。
jwks, err := keyfunc.NewDefaultOverrideCtx(context.Background(), []string{jwksURL}, keyfunc.Override{
    RefreshInterval: time.Hour, // リフレッシュ間隔
    HTTPTimeout:     10 * time.Second,  // 取得のHTTPタイムアウト
    RefreshUnknownKID: rate.NewLimiter( // 何回リフレッシュを許容するか
        rate.Every(60*time.Second), 1,
    ),
})

https://pkg.go.dev/github.com/golang-jwt/jwt/v5

  • ParseWithClaimsメソッドを使うことで署名の整合性をチェックする。
    • 引数のkeyfuncに上記パッケージで取得したJWKSを渡すことができる。
  • 標準のClaimの検証も行う。
    • exp(Expiration Time)
      • トークンの有効期限が現在時刻より前ならエラー。
    • nbf(Not Before)
      • トークンがまだ有効でない(未来時刻)ならエラー。
    • iat(Issued At)
      • 発行時刻が未来ならエラー。

Discussion