Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Membina penyelesaian pengurusan kunci API yang boleh dipercayai: Golang dengan Vault

Membina penyelesaian pengurusan kunci API yang boleh dipercayai: Golang dengan Vault

WBOY
WBOYasal
2023-07-17 17:33:071375semak imbas

Membina penyelesaian pengurusan kunci API yang boleh dipercayai: Gabungan Golang dan Vault

Pengenalan:
Dengan populariti pengkomputeran awan dan seni bina perkhidmatan mikro, penggunaan API (Antara Muka Pengaturcaraan Aplikasi) semakin meluas. Untuk memastikan keselamatan sistem, pengurusan kunci API telah menjadi isu penting. Dalam artikel ini, kami akan memperkenalkan cara menggunakan bahasa pengaturcaraan Golang dan sistem pengurusan kunci Vault untuk membina penyelesaian pengurusan kunci API yang boleh dipercayai.

  1. Apakah itu penyelesaian pengurusan kunci API?

Penyelesaian pengurusan kunci API merujuk kepada sistem untuk pengurusan berpusat, penyimpanan dan kawalan capaian kunci API. Melalui sistem ini, pembangun boleh menjana, membatalkan dan mengemas kini kunci API dengan lebih mudah, dan pada masa yang sama mengaudit dan memantau penggunaan kunci untuk memastikan keselamatan sistem.

  1. Faedah menggunakan Golang dan Vault

Golang ialah bahasa pengaturcaraan yang berkuasa dan cekap sesuai untuk membina sistem teragih dan perkhidmatan mikro. Dari segi pengurusan kunci API, Golang menyediakan banyak perpustakaan standard dan perpustakaan pihak ketiga untuk memudahkan proses pembangunan. Vault ialah sistem pengurusan kunci sumber terbuka yang menyediakan penyelesaian pengurusan kunci yang selamat dan berskala. Menggunakan Golang bersama Vault boleh membantu pembangun membina sistem pengurusan kunci API yang boleh dipercayai dengan cepat.

  1. Jana kunci API menggunakan Golang

Pertama, kami menjana kunci API dengan menggunakan Golang. Contoh kod berikut menunjukkan cara menggunakan Golang untuk menjana kunci API rawak:

package main

import (
    "crypto/rand"
    "encoding/base64"
    "fmt"
)

func generateAPIKey() string {
    key := make([]byte, 32)
    _, err := rand.Read(key)
    if err != nil {
        panic(err)
    }
    return base64.URLEncoding.EncodeToString(key)
}

func main() {
    apiKey := generateAPIKey()
    fmt.Println("API Key:", apiKey)
}

Menjalankan kod di atas akan mengeluarkan kunci API yang dijana secara rawak ke konsol.

  1. Gunakan Vault untuk menyimpan dan mengurus kunci API

Seterusnya, kami akan menggunakan Vault untuk menyimpan dan mengurus kunci API yang dijana. Mula-mula, anda perlu menyediakan pelayan Vault pada pelayan setempat atau awan. Selepas pemasangan, anda boleh menggunakan kod berikut untuk menyimpan kunci API yang dijana ke dalam Vault melalui API:

package main

import (
    "fmt"
    "log"

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

func storeAPIKey(apiKey string) {
    vaultConfig := &api.Config{
        Address: "<vault_address>", // Vault服务器的地址
    }

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

    vaultToken := "<vault_token>" // 需要替换为你在Vault中创建的Token
    client.SetToken(vaultToken)

    secretValue := map[string]interface{}{
        "value": apiKey,
    }

    secretPath := "secret/api_key" // 存储API密钥的路径
    _, err = client.Logical().Write(secretPath, secretValue)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("API Key stored successfully")
}

func main() {
    apiKey := generateAPIKey()
    storeAPIKey(apiKey)
}

Dalam kod di atas, anda perlu menggantikan 42c636d4d3ea1c68fe57117911b6573f dengan Vault yang sebenarnya anda gunakan Alamat pelayan, gantikan 38c5243b55beec0bf99c143ff963373f dengan Token yang dibuat dalam Vault. Selepas menjalankan kod di atas, kunci API yang dijana akan disimpan dalam Bilik Kebal. 42c636d4d3ea1c68fe57117911b6573f替换为你实际使用的Vault服务器的地址,将38c5243b55beec0bf99c143ff963373f替换为在Vault中创建的Token。运行上述代码后,将会在Vault中存储生成的API密钥。

  1. 使用Vault获取API密钥

通过Vault存储了API密钥后,我们可以使用以下代码示例来获取API密钥:

package main

import (
    "fmt"
    "log"

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

func getAPIKey() (string, error) {
    vaultConfig := &api.Config{
        Address: "<vault_address>", // Vault服务器的地址
    }

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

    vaultToken := "<vault_token>" // 需要替换为你在Vault中创建的Token
    client.SetToken(vaultToken)

    secretPath := "secret/api_key" // 存储API密钥的路径
    secret, err := client.Logical().Read(secretPath)
    if err != nil {
        return "", err
    }

    apiKey, ok := secret.Data["value"].(string)
    if !ok {
        return "", fmt.Errorf("Invalid API Key")
    }

    return apiKey, nil
}

func main() {
    apiKey, err := getAPIKey()
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("API Key:", apiKey)
}

同样,需要将42c636d4d3ea1c68fe57117911b6573f替换为你实际使用的Vault服务器的地址,将38c5243b55beec0bf99c143ff963373f

    Dapatkan kunci API menggunakan Vault


    Selepas menyimpan kunci API melalui Vault, kita boleh menggunakan contoh kod berikut untuk mendapatkan kunci API: 🎜rrreee🎜Begitu juga, memerlukan menjadi Gantikan 42c636d4d3ea1c68fe57117911b6573f dengan alamat pelayan Vault yang sebenarnya anda gunakan dan 38c5243b55beec0bf99c143ff963373f dengan Token yang dibuat dalam Vault. Selepas menjalankan kod di atas, kunci API yang disimpan akan diperoleh daripada Vault. 🎜🎜Kesimpulan: 🎜Dengan menggunakan Golang dan Vault bersama-sama, kami boleh membina penyelesaian pengurusan kunci API yang boleh dipercayai dengan cepat. Menggunakan Golang untuk menjana kunci API, dan menyimpan serta mengurus kunci ini melalui Vault boleh memastikan keselamatan dan kebolehpercayaan sistem. Pada masa yang sama, kecekapan Golang dan fleksibiliti Vault juga boleh memenuhi keperluan sistem dengan saiz dan kerumitan yang berbeza. Kami berharap algoritma dan kod sampel yang disediakan dalam artikel ini dapat membantu pembaca membina penyelesaian pengurusan kunci API mereka sendiri. 🎜

Atas ialah kandungan terperinci Membina penyelesaian pengurusan kunci API yang boleh dipercayai: Golang dengan Vault. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn