Golang快速集成XAuth
本教程将介绍如何使⽤XAuth 的统⼀身份验证服务,它能让我们在 Golang 项⽬中轻松处理⽤户数据。
⽤户身份验证是 Web 应⽤程序中的⼀项基本功能,因此⼈们可以创建和访问⾃⼰的帐户,但不幸的是,身份验证并不总是很容易设置,可能经常错误地实现登录和注销功能。以下介绍如何使⽤Golang快速与XAuth集成,将XAuth作为WEB应⽤程序的⽤户存储库并实现⽤户登录。
准备⼯作
本教程使⽤了Golang构建程序,所以请留意各项依赖包的版本。
- Go-OIDC
- ⼀个免费的 XAuth 账户,如果没有,免费创建
- 已有或新建的Web应用程序或项目,需要集成认证流程
- 或可使用本教程代码示例 XAuth Go Example,基于MIT协议,可以免费/商业使用。
开发环境准备
⾸先我们使⽤go创建⼀个⼲净的开发环境,并激活该环境
mkdir demo
cd demo
go mod init demo
创建http应⽤
我们创建⼀个go的http应⽤,创建main.go⽂件,并在⽂件中输⼊以下代码:
package main
import (
"fmt"
"net/http"
)
func main() {
// 根路由
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Println("Ready goto XAuth...")
})
// XAuth认证callback
http.HandleFunc("/XAuth/callback", func(w http.ResponseWriter, r
*http.Request) {
fmt.Println("XAuth done...")
w.Write([]byte("hahahahhahha"))
})
fmt.Printf("listening on http://%s/", "0.0.0.0:5556")
fmt.Println(http.ListenAndServe(":5556", nil))
}
连接应⽤到 XAuth
我们接下来要在 XAuth 上创建⼀个应⽤。我们选择左侧菜单的【应⽤】然后在⾯板右侧点击【创建应⽤】
Step 1:点击创建应⽤,在弹出框中选择认证⽅式 OIDC
,选择应⽤类型 Web 应⽤
,点击下⼀步
Step 2:设置好http应⽤认证后的回调url
,点击保存
Step 3:查看client id
和client secret
,后续在http应⽤中设置认证时需要⽤到。
Step 4:然后点击授权⽤户,设置⽤户的授权。
给需要的⽤户设置授权授权后可以在⻚⾯看到已授权的⽤户。
⚠️特别步骤:我们需要增加一个安全域,CORS防止调试时被浏览器拦截,点击左侧菜单【API】选择【安全域】
然后点击右侧的【添加域】根据下面的图示输入:
我们在代码中增加XAuth认证跳转部分:
package main
import (
"fmt"运⾏起来后,我们访问/路由,会跳转到XAuth的认证⻚⾯
"net/http"
"github.com/coreos/go-oidc/v3/oidc"
"golang.org/x/net/context"
"golang.org/x/oauth2"
)
var (
clientID = "o9xW343UeS6T9E7BvBZ5i9hKUqp1zwJR"
clientSecret = "x28M5R39q37Tv05p40wqX60Sa1952egbFm4h1790N3q3ct8i"
)
func main() {
ctx := context.Background()
provider, err := oidc.NewProvider(ctx,
"https://qqcweixu.xauth.cloud/oauth/v1")
if err != nil {
fmt.Println(err)
return
}
config := oauth2.Config{
ClientID: clientID,
ClientSecret: clientSecret,
Endpoint: provider.Endpoint(),
RedirectURL: "http://127.0.0.1:5556/XAuth/callback",
Scopes: []string{oidc.ScopeOpenID, "profile", "email"},
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Println("Ready goto XAuth...")
http.Redirect(w, r, config.AuthCodeURL(""), http.StatusFound)
})
http.HandleFunc("/XAuth/callback", func(w http.ResponseWriter, r
*http.Request) {
fmt.Println("XAuth done...")
w.Write([]byte("hahahahhahha"))
})
fmt.Printf("listening on http://%s/", "0.0.0.0:5556")
fmt.Println(http.ListenAndServe(":5556", nil))
}
运⾏起来后,我们访问/路由,会跳转到XAuth的认证⻚⾯。
输⼊你的 XAuth 开发者⽤户名和密码以登录你的http应⽤。⼀切顺利的话,你会看到跳转到路由后显示的信息。
总结
我们通过 go 构建了⼀个简单的应⽤,利⽤Open ID Connect 协议并对接 XAuth 提供的身份服务,
实现了保护我们特定路由的⽅法。