ホームページ  >  記事  >  バックエンド開発  >  Go 言語を使用して構築されたマイクロサービス ID 認証および認可システム

Go 言語を使用して構築されたマイクロサービス ID 認証および認可システム

王林
王林オリジナル
2023-08-10 17:43:461394ブラウズ

Go 言語を使用して構築されたマイクロサービス ID 認証および認可システム

Go 言語を使用して構築されたマイクロサービス ID 認証および認可システム

マイクロサービス アーキテクチャの台頭により、ID 認証および認可システムは分散アプリケーションの構築において重要な部分になりました。欠かせない部品です。この記事では、Go 言語を使用してシンプルかつ強力なマイクロサービスの認証および認可システムを構築する方法をコード例を添付して紹介します。

まず、認証方法を決定する必要があります。マイクロサービス アーキテクチャでは、一般的な ID 認証方法には、トークンベースの認証と JWT (JSON Web Token) ベースの認証が含まれます。この例では、JWT ベースの認証を使用します。

JWT を生成して検証するために、Go 言語のサードパーティ ライブラリを使用できます。ここでは、github.com/dgrijalva/jwt-go ライブラリを使用することを選択します。

まず、このライブラリを Go プログラムにインポートする必要があります:

import (
    "github.com/dgrijalva/jwt-go"
)

次に、JWT に署名するためのキーを定義する必要があります。このキーは、JWT のセキュリティを確保するために使用されるランダムな文字列である必要があります。実際のアプリケーションでは、セキュリティを向上させるためにキーを環境変数に保存できます。

var signingKey = []byte("ThisIsASecretKey")

次に、ユーザーの ID 情報を表す構造を定義する必要があります。この例では、ユーザー ID とロール情報のみを保存します。実際のニーズに基づいて、必要に応じてフィールドを追加できます。

type User struct {
    ID     int64  `json:"id"`
    Role   string `json:"role"`
}

次に、JWT を生成する関数を実装する必要があります。この関数はユーザー オブジェクトをパラメーターとして受け取り、新しい JWT 文字列を返します。

func GenerateToken(user User) (string, error) {
    claims := jwt.MapClaims{
        "id":   user.ID,
        "role": user.Role,
    }
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    return token.SignedString(signingKey)
}

次に、JWT を検証する関数を実装する必要があります。この関数は、JWT 文字列をパラメータとして受け取り、解析されたユーザー オブジェクトを返します。

func ValidateToken(tokenString string) (User, error) {
    token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
        return signingKey, nil
    })
    if err != nil {
        return User{}, err
    }
    if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
        return User{
            ID:   int64(claims["id"].(float64)),
            Role: claims["role"].(string),
        }, nil
    }
    return User{}, errors.New("Invalid token")
}

最後に、マイクロサービスでこれらの関数を認証と認可に使用できるようになります。ユーザーがログインすると、JWT を生成してユーザーに返すことができます。ユーザーがリクエストを行うと、JWT を検証し、ユーザーのロール情報をチェックして、アクセス権があるかどうかを判断できます。

func LoginHandler(w http.ResponseWriter, r *http.Request) {
    // 验证用户身份...
    // 生成JWT
    token, _ := GenerateToken(user)
    // 将JWT返回给用户
    w.Write([]byte(token))
}

func SecureHandler(w http.ResponseWriter, r *http.Request) {
    // 验证JWT
    tokenString := r.Header.Get("Authorization")
    user, err := ValidateToken(tokenString)
    if err != nil {
        w.WriteHeader(http.StatusUnauthorized)
        w.Write([]byte("Unauthorized"))
        return
    }
    // 检查用户角色...
    // 处理请求...
    w.Write([]byte("Authorized"))
}

上記の例を通じて、Go 言語を使用してシンプルだが強力なマイクロサービスの認証および認可システムを構築する方法を確認できます。もちろん、実際のアプリケーションでは、リフレッシュ トークンやシングル サインオンなどの機能を追加する必要がある場合があります。ただし、単純なアプリケーション シナリオであっても複雑なアプリケーション シナリオであっても、Go 言語の強力な機能と豊富なサードパーティ ライブラリは、安全で信頼性の高い ID 認証および認可システムの構築をサポートします。

以上がGo 言語を使用して構築されたマイクロサービス ID 認証および認可システムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。