ホームページ > バックエンド開発 > Golang > Go 言語サーバー プログラミングの実践: JWT を使用して API インターフェイスを保護する

Go 言語サーバー プログラミングの実践: JWT を使用して API インターフェイスを保護する

WBOY
リリース: 2023-06-18 16:55:28
オリジナル
1122 人が閲覧しました

今日のインターネット時代では、Web アプリケーションの人気に伴い、API (アプリケーション プログラミング インターフェイス、アプリケーション プログラミング インターフェイス) が開発者からの注目と依存度をますます高めています。そして、APIインターフェースのセキュリティを保護することは非常に重要な問題です。この記事では、Go 言語を例として、JWT (JSON Web Token) を使用して API インターフェイスのセキュリティを保護する方法を紹介します。

1. JWT とは

JWT の正式名は JSON Web Token で、当事者間で安全な情報を送信するために使用されるオープン標準 (RFC 7519) です。 JWT は、情報を認証、認可、交換できます。 JWT は、Web アプリケーションまたは API で認証情報を渡すために一般的に使用されます。

JWT では、ヘッダー、ペイロード、署名の 3 つの部分で構成されます。

  1. ヘッダー

ヘッダーは通常、トークンのタイプ (つまり、JWT) とアルゴリズム名 (HMAC SHA256 や RSA など) の 2 つの部分で構成されます。

{
"alg": "HS256",
"typ": "JWT"
}

  1. ペイロード

ペイロードには、ユーザー ID やアクセス許可など、信頼性の高い有用な情報が含まれています。カスタム クレームをペイロードに追加できます (登録されたクレーム名のみを使用することをお勧めします)。

{
"サブ": "1234567890",
"名前": "ジョン ドゥ",
"iat": 1516239022
}

    # #Signature
JWT が本物で有効であるかどうかを検証するには、ヘッダーで指定されたキーとアルゴリズムを使用して JWT に署名する必要があります。

HMACSHA256(

base64UrlEncode(header) "."
base64UrlEncode(payload),
your-256-bit-secret
)

2. JWT を使用するAPI インターフェイスの保護

    JWT 依存関係のインストール
最初に Go 言語の JWT 依存関係パッケージをインストールする必要があります:

go get github.com/dgrijalva /jwt- go

    JWT の生成と検証
JWT を使用して API インターフェイスを保護する場合は、JWT を生成して検証する必要があります。以下は、JWT を生成して検証するための簡単なコード例です。

Generate JWT

func GenerateToken(userid string) (string, error) {

token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
    "userid": userid,
    "exp":   time.Now().Add(time.Hour * 24 * 7).Unix(), //有效期一周
})
tokenString, err := token.SignedString([]byte("mysecretkey"))
if err != nil {
    return "", err
}
return tokenString, nil
ログイン後にコピー

}

Verify JWT

func ValidateToken(tokenString string) (bool, string) {

token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
    return []byte("mysecretkey"), nil
})
if err == nil && token.Valid {
    claims := token.Claims.(jwt.MapClaims)
    userid := claims["userid"].(string) //取出userid
    return true, userid
} else {
    return false, ""
}
ログイン後にコピー

}

    API インターフェイスで JWT 検証メカニズムを使用する
  1. #API インターフェイスでは、まず HTTP リクエストから JWT を読み取り、それを確認する必要があります。検証に合格すると、API インターフェイスへのアクセスが許可されます。そうでない場合は、403 エラー (許可なし) が返されます。

以下はサンプル コードです:

func myAPIHandler(w http.ResponseWriter, r *http.Request) {

tokenString := r.Header.Get("Authorization") //从HTTP请求中获取JWT
if tokenString == "" {
    w.WriteHeader(http.StatusForbidden)
    return
}
tokenString = strings.TrimPrefix(tokenString, "Bearer ")
ok, userid := ValidateToken(tokenString) //校验JWT
if !ok {
    w.WriteHeader(http.StatusForbidden)
    return
}
// 对于登录用户,可以从JWT中获取用户信息(例如userid),并进行权限控制
// ...
// 处理API请求
// ...
ログイン後にコピー

}

3.概要

JWT を使用すると、API インターフェイスのセキュリティを効果的に保護し、承認されたユーザーのみが API インターフェイスにアクセスできるようにすることができます。 Go 言語では、JWT の使用も非常に簡単で、依存関係パッケージをインストールし、対応するコードを記述するだけです。同時に、API インターフェースのセキュリティを保護するために、HTTPS 暗号化、ファイアウォール設定、ログ監視などの他のセキュリティ対策も必要です。

以上がGo 言語サーバー プログラミングの実践: JWT を使用して API インターフェイスを保護するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート