Maison > Article > développement back-end > Comment authentifier l'identité dans Golang
Dans le monde Internet moderne, la sécurité et l'authentification de l'identité sont cruciales. Il en va de même pour les développeurs développant des applications utilisant Golang. Cet article expliquera l'authentification dans Golang, qui inclut l'authentification de base et l'authentification OAuth 2.0.
L'authentification de base est l'une des méthodes d'authentification les plus simples et les plus courantes. Dans Golang, nous pouvons utiliser le package net/http
intégré pour implémenter l'authentification de base. Voici un exemple : 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
。
OAuth2.0是一种开放标准,用于允许第三方访问已授权用户的资源的流程。在Golang中,我们可以使用 go-oauth2/oauth2
包来实现OAuth 2.0认证。
我们首先需要在 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。
最后我们可以通过写入 data
rrreee
BasicAuth
qui vérifie que le nom d'utilisateur et le mot de passe correspondent à ceux fournis par r.BasicAuth()
Credentials match. Si aucune information d'identification n'est fournie ou si les informations d'identification fournies sont incorrectes, une réponse HTTP 401 non autorisée est déclenchée. Si les informations d'identification sont vérifiées avec succès, la fonction handler
est appelée. En plus de cet exemple d'authentification de base, il est également possible d'utiliser des bibliothèques d'authentification fournies par des packages appartenant à d'autres tiers, tels que Gorilla Toolkit
. Authentification OAuth 2.0🎜🎜OAuth2.0 est une norme ouverte pour le processus permettant à des tiers d'accéder aux ressources des utilisateurs autorisés. Dans Golang, nous pouvons utiliser le package go-oauth2/oauth2
pour implémenter l'authentification OAuth 2.0. 🎜oauth2.Config
: 🎜rrreee🎜 Dans l'exemple ci-dessus, nous avons défini l'ID client, le secret client, l'URL de redirection et la fin des points et portées OAuth2.0. Le endpoint
ici provient de google.Endpoint
, qui est une infrastructure de fournisseur OAuth2.0 prédéfinie. 🎜oauth2Config.AuthCodeURL
pour obtenir l'URL d'autorisation. Voici un exemple : 🎜rrreee🎜Dans l'exemple ci-dessus, nous utilisons la méthode oauth2Config.AuthCodeURL("")
pour obtenir l'URL d'autorisation, puis utilisons http.Redirect
pour rediriger l'utilisateur dirigé vers la page d'autorisation. 🎜oauth2Config.Exchange
pour obtenir le jeton d'accès. Nous pouvons utiliser la méthode oauth2Config.Client
pour créer un client HTTP authentifié et utiliser ce client pour appeler l'API Google OAuth2.0. 🎜🎜Enfin nous pouvons répondre à la requête en écrivant les données de réponse dans la variable data
. 🎜🎜Conclusion🎜🎜Dans cet article, nous avons présenté deux façons d'implémenter l'authentification dans Golang : l'authentification de base et l'authentification OAuth 2.0. En utilisant ces méthodes, nous pouvons garantir que notre application est sécurisée et autorise uniquement l'accès aux utilisateurs de confiance. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!