現代のインターネットの世界では、セキュリティと 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
など、他のサードパーティに属するパッケージによって提供される認証ライブラリを使用することもできます。
OAuth2.0 は、サードパーティが許可されたユーザーのリソースにアクセスできるようにするプロセスのオープン標準です。 Golang では、go-oauth2/oauth2
パッケージを使用して OAuth 2.0 認証を実装できます。
まず、OAuth2.0 プロバイダーの Web サイトにアプリケーションを登録し、クライアント 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
は、事前定義された OAuth2.0 プロバイダー インフラストラクチャである google.Endpoint
から取得されます。
クライアント構成を設定したので、ユーザーを 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 ユーザーは認証ページにリダイレクトされます。
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 で ID を認証する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。