シングル サインオン (SSO) はユーザー認証方法であり、ユーザーは一度ログインすると、ユーザー名とパスワードを再入力することなく、別のシステムやアプリケーションにアクセスできるようになります。エンタープライズレベルのアプリケーションでは、シングル サインオンは、ユーザー エクスペリエンスを向上させ、管理操作を簡素化し、セキュリティを強化する上で非常に重要です。
Golang 言語は、その効率性、シンプルさ、メンテナンスの容易さから広く注目を集めています。この記事では、Golang を使用してシングル サインオンを実装する方法を紹介します。
シングル サインオンには、主にユーザー エージェント、認証センター、リソース サービスの 3 つの役割が含まれます。ユーザーがアプリケーション システムにログインすると、ID 認証のために認証センターにリダイレクトされ、認証に合格した後も、他のリソース サービスへのアクセス権を取得できます。
Golang では、Cookie またはトークンを使用してシングル サインオン機能を実装できます。
2.1 Cookieメソッド
Cookieメソッドでは、ログイン情報がCookieに保存され、ログイン後に他のサービスにアクセスした際に、Cookieの情報がリソースサービスに転送されます。 、リソース サービスがユーザー ID を検証できるようにします。
まず、認証センターでログイン認証を行い、認証情報をCookieに保存するコードは次のとおりです:
func Login(c *gin.Context) { c.SetCookie("username", "123", 3600, "/", "localhost", false, true) c.JSON(200, "登录成功") }
上記コードでは、SetCookieメソッドの最初のパラメータは Cookie です。名前、2 番目のパラメータは Cookie の値、3 番目のパラメータは Cookie の有効期限、4 番目のパラメータは Cookie の実効パス、5 番目のパラメータは Cookie のドメイン名です。 6 番目のパラメータは HTTPS のみがサポートされているかどうかを示し、最後のパラメータはクロスドメイン アクセスが許可されているかどうかを示します。
リソース サービスでは、c.Request.Cookie("username")
メソッド:
func SSO(c *gin.Context) { cookie, _ := c.Request.Cookie("username") if cookie != nil { c.JSON(200, "访问成功") } else { c.JSON(200, "请重新登录") } }
2.2 Token メソッド
# を通じて Cookie 情報を取得できます。 ## トークン方式では、認証センターが認証情報をトークンの形で暗号化し、リソースサービスに送信する際に、リソースサービスで復号化することでユーザーアカウントの正当性を検証します。 以下は、Token メソッドの実装コードです。func Login(c *gin.Context) { username := "123" token, err := CreateToken(username) if err != nil { c.JSON(500, "生成Token错误") return } c.JSON(200, gin.H{ "Token": token, }) } func CreateToken(username string) (string, error) { claims := Claims{ username, jwt.StandardClaims{ ExpiresAt: time.Now().Add(time.Hour * 24).Unix(), Issuer: "test", }, } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) signedToken, err := token.SignedString([]byte("SecretKey")) if err != nil { return "", err } return signedToken, nil } func SSO(c *gin.Context) { tokenString := c.Request.Header.Get("Authorization") if tokenString == "" { c.JSON(401, "未登录") return } token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (interface{}, error) { return []byte("SecretKey"), nil }) if err != nil || !token.Valid { c.JSON(401, "未登录") return } c.JSON(200, "访问成功") } type Claims struct { Username string `json:"username"` jwt.StandardClaims }
以上がシングルサインオンとは何ですか? golangを使って実装するにはどうすればいいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。