今日のインターネット時代では、Web アプリケーションの人気に伴い、API (アプリケーション プログラミング インターフェイス、アプリケーション プログラミング インターフェイス) が開発者からの注目と依存度をますます高めています。そして、APIインターフェースのセキュリティを保護することは非常に重要な問題です。この記事では、Go 言語を例として、JWT (JSON Web Token) を使用して API インターフェイスのセキュリティを保護する方法を紹介します。
1. JWT とは
JWT の正式名は JSON Web Token で、当事者間で安全な情報を送信するために使用されるオープン標準 (RFC 7519) です。 JWT は、情報を認証、認可、交換できます。 JWT は、Web アプリケーションまたは API で認証情報を渡すために一般的に使用されます。
JWT では、ヘッダー、ペイロード、署名の 3 つの部分で構成されます。
ヘッダーは通常、トークンのタイプ (つまり、JWT) とアルゴリズム名 (HMAC SHA256 や RSA など) の 2 つの部分で構成されます。
{
"alg": "HS256",
"typ": "JWT"
}
ペイロードには、ユーザー ID やアクセス許可など、信頼性の高い有用な情報が含まれています。カスタム クレームをペイロードに追加できます (登録されたクレーム名のみを使用することをお勧めします)。
{
"サブ": "1234567890",
"名前": "ジョン ドゥ",
"iat": 1516239022
}
base64UrlEncode(header) "."
base64UrlEncode(payload),
your-256-bit-secret
)
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 JWTfunc 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, "" }
以下はサンプル コードです:
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 サイトの他の関連記事を参照してください。