ホームページ >バックエンド開発 >Golang >Golang と Vault を使用して安全な認証システムを構築する

Golang と Vault を使用して安全な認証システムを構築する

WBOY
WBOYオリジナル
2023-07-17 17:57:27923ブラウズ

Golang と Vault を使用して安全な認証システムを構築する

今日のインターネット時代において、ユーザー データのセキュリティを保護することは非常に重要な課題となっています。認証は、ユーザー データを保護する防御の第一線として、あらゆるアプリケーションにとって不可欠なモジュールです。認証のセキュリティを確保するために、Golang と Vault を使用して安全な認証システムを構築できます。

Vault は、API キー、パスワード、証明書などの機密データを安全に管理および保護するために HashiCorp によって開発されたオープンソース ツールです。鍵管理、認証、アクセス制御などの機能を備えており、強力で安全な認証システムの構築に役立ちます。

まず、Vault をインストールして構成する必要があります。 HashiCorp 公式 Web サイトからダウンロードし、公式ドキュメントに従ってインストールして設定できます。インストールすると、HTTP REST API または Golang SDK を介して Vault と対話できるようになります。

次に、Golang を使用して簡単な認証システムを作成します。まず、Vault の Golang SDK を導入する必要があります。次のコマンドを使用してインストールできます:

go get github.com/hashicorp/vault/api

次に、Vault の Golang SDK をインポートする必要があります:

import (
    "github.com/hashicorp/vault/api"
)

次に、Vault への接続を設定する必要があります。まず、Vault トークンを取得する必要があります。 Vault の Web インターフェイスでトークンを作成し、構成ファイルに保存して、コードで読み取ることができます。ここでは、デモンストレーションの目的でトークンをコードに直接ハードコードしているだけであることに注意してください。実際には、ベスト プラクティスに従ってください。

config := &api.Config{
    Address: "http://localhost:8200",
}

client, err := api.NewClient(config)
if err != nil {
    log.Fatal(err)
}

client.SetToken("your_vault_token")

Vault への接続に成功したので、簡単な認証関数を作成します。 Vault の K/V ストレージ エンジンを使用して、ユーザー名とパスワードのキーと値のペアを保存できます。まず、K/V ストレージ エンジン用のシークレット ストレージ パスを作成する必要があります。

path := "/secret/userinfo"

data := map[string]interface{}{
    "username": "admin",
    "password": "password123",
}

_, err := client.Logical().Write(path, data)
if err != nil {
    log.Fatal(err)
}

ユーザー名とパスワードを Vault に保存したので、ユーザーが入力したユーザー名とパスワードが正しいことを確認する検証関数を作成します。

func authenticate(username, password string) bool {
    path := "/secret/userinfo"

    secret, err := client.Logical().ReadWithData(path, map[string]interface{}{"key": "value"})
    if err != nil {
        log.Fatal(err)
    }

    storedUsername := secret.Data["username"].(string)
    storedPassword := secret.Data["password"].(string)

    if username == storedUsername && password == storedPassword {
        return true
    }

    return false
}

上記のコードでは、まず Vault の API を使用して、保存されているユーザー名とパスワードを読み取ります。次に、ユーザーが入力したユーザー名とパスワードを保存された値と比較します。一致する場合は true を返し、一致しない場合は false を返します。

これで、上記の認証関数を使用してユーザーの身元を確認できるようになります。

username := "admin"
password := "password123"

result := authenticate(username, password)

if result {
    fmt.Println("Authentication succeeded")
} else {
    fmt.Println("Authentication failed")
}

上記のコードでは、認証のためにユーザー名とパスワードをauthenticate関数に渡します。返された結果に基づいて、対応する情報を出力します。

Golang と Vault を使用することで、安全で強力な認証システムを構築できます。 Vault の強力な機能はユーザー データのセキュリティを保護するのに役立ちますが、Golang のシンプルさと効率性により開発プロセスがよりスムーズになります。

完全なコード例:

package main

import (
    "fmt"
    "log"

    "github.com/hashicorp/vault/api"
)

func main() {
    config := &api.Config{
        Address: "http://localhost:8200",
    }

    client, err := api.NewClient(config)
    if err != nil {
        log.Fatal(err)
    }

    client.SetToken("your_vault_token")

    path := "/secret/userinfo"

    data := map[string]interface{}{
        "username": "admin",
        "password": "password123",
    }

    _, err = client.Logical().Write(path, data)
    if err != nil {
        log.Fatal(err)
    }

    username := "admin"
    password := "password123"

    result := authenticate(client, username, password)

    if result {
        fmt.Println("Authentication succeeded")
    } else {
        fmt.Println("Authentication failed")
    }
}

func authenticate(client *api.Client, username, password string) bool {
    path := "/secret/userinfo"

    secret, err := client.Logical().ReadWithData(path, map[string]interface{}{})
    if err != nil {
        log.Fatal(err)
    }

    storedUsername := secret.Data["username"].(string)
    storedPassword := secret.Data["password"].(string)

    if username == storedUsername && password == storedPassword {
        return true
    }

    return false
}

この記事では、Golang と Vault を使用して、シンプルで安全な認証システムを構築しました。 Vault の API を使用すると、機密データを Vault に簡単に保存し、Golang を使用してユーザーを認証できます。このようにして、ユーザーのデータのセキュリティを確保し、強力で安全な認証プロセスを提供します。

以上がGolang と Vault を使用して安全な認証システムを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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