Heim >Backend-Entwicklung >Golang >So authentifizieren Sie die Identität in Golang

So authentifizieren Sie die Identität in Golang

PHPz
PHPzOriginal
2023-04-11 09:13:281008Durchsuche

In der modernen Internetwelt sind Sicherheit und Identitätsauthentifizierung von entscheidender Bedeutung. Das Gleiche gilt für Entwickler, die Anwendungen mit Golang entwickeln. In diesem Artikel wird die Authentifizierung in Golang erläutert, einschließlich der Basisauthentifizierung und der OAuth 2.0-Authentifizierung.

Basisauthentifizierung

Die Basisauthentifizierung ist eine der einfachsten und gebräuchlichsten Authentifizierungsmethoden. In Golang können wir das integrierte Paket net/http verwenden, um die Basisauthentifizierung zu implementieren. Hier ist ein Beispiel: 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)
}

在上面的示例中,我们定义了一个 BasicAuth 函数,用于验证用户名和密码是否与 r.BasicAuth() 提供的凭据相匹配。如果没有提供凭据或者提供的凭据不正确,则触发HTTP 401 Unauthorized 响应。如果凭据验证通过,则调用 handler 函数。

除了这个基本身份验证示例,还可以使用属于其他第三方的包提供的身份验证库,例如 Gorilla Toolkit

OAuth 2.0认证

OAuth2.0是一种开放标准,用于允许第三方访问已授权用户的资源的流程。在Golang中,我们可以使用 go-oauth2/oauth2 包来实现OAuth 2.0认证。

第一步:注册应用程序并获取客户端ID和密钥

我们首先需要在 OAuth2.0 提供商的网站上注册我们的应用程序,并获取客户端 ID 和密钥。例如,我们可以在 Google Cloud Console 中创建并注册一个新的项目,然后选择“创建凭证”以获取我们的客户端 ID 和密钥。

第二步:设置客户端设置

我们需要设置一个客户端配置才能使用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 来自 google.Endpoint,它是一个预定义的 OAuth2.0 提供商基础结构。

第三步:重定向到授权页面

现在我们已经设置了客户端配置,我们需要将用户重定向到 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 将用户重定向到授权页面。

第四步:处理回调

一旦用户同意授权我们的应用程序,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。

最后我们可以通过写入 datarrreee

Im obigen Beispiel definieren wir eine BasicAuth-Funktion, die überprüft, ob der Benutzername und das Passwort mit den von r.BasicAuth() bereitgestellten Anmeldeinformationen übereinstimmen . Wenn keine Anmeldeinformationen angegeben werden oder die angegebenen Anmeldeinformationen falsch sind, wird eine HTTP 401 Unauthorized-Antwort ausgelöst. Wenn die Anmeldeinformationen erfolgreich überprüft wurden, wird die Funktion handler aufgerufen.

Zusätzlich zu diesem Basisauthentifizierungsbeispiel können Sie auch Authentifizierungsbibliotheken verwenden, die von Paketen anderer Drittanbieter bereitgestellt werden, wie z. B. Gorilla Toolkit.

OAuth 2.0-Authentifizierung🎜🎜OAuth2.0 ist ein offener Standard für den Prozess, der Dritten den Zugriff auf Ressourcen autorisierter Benutzer ermöglicht. In Golang können wir das Paket go-oauth2/oauth2 verwenden, um die OAuth 2.0-Authentifizierung zu implementieren. 🎜

Schritt 1: Registrieren Sie die Anwendung und erhalten Sie die Client-ID und den Schlüssel

🎜Wir müssen zunächst unsere Anwendung auf der Website des OAuth2.0-Anbieters registrieren und die Client-ID und den Schlüssel erhalten. Beispielsweise können wir ein neues Projekt in der Google Cloud Console erstellen und registrieren und „Anmeldeinformationen erstellen“ auswählen, um unsere Client-ID und unser Geheimnis zu erhalten. 🎜

Schritt 2: Client-Einstellungen festlegen

🎜Wir müssen eine Client-Konfiguration für die Authentifizierung mit OAuth2.0 einrichten. Wir können dies erreichen, indem wir ein oauth2.Config-Objekt erstellen: 🎜rrreee🎜 Im obigen Beispiel haben wir die Client-ID, das Client-Geheimnis, die Umleitungs-URL sowie das Ende von OAuth2.0-Punkten und -Bereichen definiert. Der endpoint stammt hier von google.Endpoint, einer vordefinierten OAuth2.0-Anbieterinfrastruktur. 🎜

Schritt 3: Weiterleitung zur Autorisierungsseite

🎜Da wir nun die Client-Konfiguration eingerichtet haben, müssen wir den Benutzer zur OAuth2.0-Autorisierungsseite umleiten. Wir können die Methode oauth2Config.AuthCodeURL verwenden, um die Autorisierungs-URL abzurufen. Hier ist ein Beispiel: 🎜rrreee🎜Im obigen Beispiel verwenden wir die Methode oauth2Config.AuthCodeURL(""), um die Autorisierungs-URL abzurufen, und verwenden dann http.Redirect Um den Benutzer zur Autorisierungsseite umzuleiten. 🎜

Schritt 4: Rückruf bearbeiten

🎜Sobald der Benutzer der Autorisierung unserer Anwendung zustimmt, leitet der OAuth2.0-Anbieter den Benutzer an die von uns bereitgestellte Weiterleitungs-URL weiter. In die Weiterleitungs-URL fügen wir einen Autorisierungscode ein, den wir verwenden müssen, um das Zugriffstoken zu erhalten. 🎜🎜Wir müssen einen Callback-Handler definieren, um Callback-Anfragen vom OAuth2.0-Anbieter zu verarbeiten. Hier ist ein Beispiel: 🎜rrreee🎜 Im obigen Beispiel extrahieren wir zunächst den Autorisierungscode aus dem Rückruf und verwenden dann die Methode oauth2Config.Exchange, um das Zugriffstoken abzurufen. Wir können die Methode oauth2Config.Client verwenden, um einen authentifizierten HTTP-Client zu erstellen und diesen Client zum Aufrufen der Google OAuth2.0-API verwenden. 🎜🎜Endlich können wir auf die Anfrage antworten, indem wir die Antwortdaten in die Variable data schreiben. 🎜🎜Fazit🎜🎜In diesem Artikel haben wir zwei Möglichkeiten zur Implementierung der Authentifizierung in Golang vorgestellt: Standardauthentifizierung und OAuth 2.0-Authentifizierung. Durch den Einsatz dieser Methoden können wir sicherstellen, dass unsere Anwendung sicher ist und nur vertrauenswürdigen Benutzern Zugriff gewährt. 🎜

Das obige ist der detaillierte Inhalt vonSo authentifizieren Sie die Identität in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn