ホームページ >バックエンド開発 >Golang >Golang で ID を認証する方法

Golang で ID を認証する方法

PHPz
PHPzオリジナル
2023-04-11 09:13:281008ブラウズ

現代のインターネットの世界では、セキュリティと ID 認証が非常に重要です。 Golang を使用してアプリケーションを開発する開発者にも同じことが当てはまります。この記事では、Basic 認証と OAuth 2.0 認証を含む Golang の認証について説明します。

基本認証

基本認証は、最も単純で最も一般的な認証方法の 1 つです。 Golang では、組み込みの net/http パッケージを使用して基本認証を実装できます。以下に例を示します。

package main

import (
    "fmt"
    "net/http"
)

func BasicAuth(handler http.HandlerFunc, username, password string) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        user, pass, ok := r.BasicAuth()
        if !ok || user != username || pass != password {
            w.Header().Set("WWW-Authenticate", `Basic realm="Restricted"`)
            w.WriteHeader(401)
            w.Write([]byte("Unauthorized.\n"))
            return
        }
        handler(w, r)
    }
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World!")
}

func main() {
    username := "user"
    password := "pass"
    http.HandleFunc("/", BasicAuth(handler, username, password))
    http.ListenAndServe(":8080", nil)
}

上の例では、ユーザー名とパスワードが r.BasicAuth() に一致することを確認する BasicAuth 関数を定義しました。マッチ。資格情報が指定されていないか、指定された資格情報が正しくない場合、HTTP 401 Unauthorized 応答がトリガーされます。資格情報の検証に合格すると、handler 関数が呼び出されます。

この基本的な認証の例に加えて、Gorilla Toolkit など、他のサードパーティに属するパッケージによって提供される認証ライブラリを使用することもできます。

OAuth 2.0 認証

OAuth2.0 は、サードパーティが許可されたユーザーのリソースにアクセスできるようにするプロセスのオープン標準です。 Golang では、go-oauth2/oauth2 パッケージを使用して OAuth 2.0 認証を実装できます。

ステップ 1: アプリケーションを登録し、クライアント ID とキーを取得する

まず、OAuth2.0 プロバイダーの Web サイトにアプリケーションを登録し、クライアント ID とキーを取得する必要があります。たとえば、Google Cloud Console で新しいプロジェクトを作成して登録し、[認証情報の作成] を選択してクライアント ID とシークレットを取得できます。

ステップ 2: クライアント設定をセットアップする

認証に OAuth2.0 を使用するようにクライアント構成をセットアップする必要があります。これを実現するには、oauth2.Config オブジェクトを作成します。

import (
    "golang.org/x/oauth2"
)

var (
    clientID     = "YOUR_CLIENT_ID"
    clientSecret = "YOUR_CLIENT_SECRET"
    redirectURL  = "http://localhost:8080/callback"
    endpoint     = google.Endpoint
    scopes       = []string{"https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/userinfo.email"}
)

var (
    oauth2Config = oauth2.Config{
        ClientID:     clientID,
        ClientSecret: clientSecret,
        RedirectURL:  redirectURL,
        Endpoint:     endpoint,
        Scopes:       scopes,
    }
)

上の例では、クライアント ID、クライアント シークレット、リダイレクト URL、OAuth2 .0 エンドポイント、およびスコープを定義しました。ここの endpoint は、事前定義された OAuth2.0 プロバイダー インフラストラクチャである google.Endpoint から取得されます。

ステップ 3: 認証ページにリダイレクトする

クライアント構成を設定したので、ユーザーを OAuth2.0 認証ページにリダイレクトする必要があります。 oauth2Config.AuthCodeURL メソッドを使用して認証 URL を取得できます。次に例を示します。

import (
    "fmt"
    "net/http"
)

func handleAuthorize(w http.ResponseWriter, r *http.Request) {
    url := oauth2Config.AuthCodeURL("")
    http.Redirect(w, r, url, http.StatusFound)
}

上記の例では、oauth2Config.AuthCodeURL("") メソッドを使用して認証 URL を取得し、次に http.Redirect# を使用します。 ## to ユーザーは認証ページにリダイレクトされます。

ステップ 4: コールバックを処理する

ユーザーがアプリケーションの承認に同意すると、OAuth2.0 プロバイダーはユーザーを提供されたリダイレクト URL にリダイレクトします。リダイレクト URL には、アクセス トークンを取得するために使用する必要がある認証コードが含まれます。

OAuth2.0 プロバイダーからのコールバック リクエストを処理するコールバック ハンドラーを定義する必要があります。次に例を示します。

func handleOAuth2Callback(w http.ResponseWriter, r *http.Request) {
    code := r.FormValue("code")
    token, err := oauth2Config.Exchange(oauth2.NoContext, code)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    client := oauth2Config.Client(oauth2.NoContext, token)
    resp, err := client.Get("https://www.googleapis.com/oauth2/v1/userinfo?alt=json")
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    defer resp.Body.Close()

    data, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    fmt.Fprintf(w, "Data: %s", data)
}
上の例では、最初にコールバックから認証コードを抽出し、次に

oauth2Config.Exchange メソッドを使用してアクセス トークンを取得します。 oauth2Config.Client メソッドを使用して認証済み HTTP クライアントを作成し、このクライアントを使用して Google OAuth2.0 API を呼び出すことができます。

最後に、応答データを

data 変数に書き込むことで、リクエストに応答できます。

結論

この記事では、Golang で認証を実装する 2 つの方法、Basic 認証と OAuth 2.0 認証を紹介しました。これらの方法を使用することで、アプリケーションの安全性を確保し、信頼できるユーザーのみにアクセスを許可することができます。

以上がGolang で ID を認証する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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