⽤户身份验证是 Web 应⽤程序中的⼀项基本功能,因此⼈们可以创建和访问⾃⼰的帐户,但不幸的是,身份验证并不总是很容易设置,可能经常错误地实现登录和注销功能。本教程将介绍如何使⽤OneAuth 的统⼀身份验证服务,对多达 1,000 个活动⽤户帐户免费使⽤,它能让我们在 Golang 项⽬中轻松处理⽤户数据。
本节介绍如何使⽤Golang快速与OneAuth集成,将OneAuth作为WEB应⽤程序的⽤户存储库并实现⽤户登录。
主要步骤:
-
准备⼯作
-
创建⼀个Golang应⽤
-
创建OneAuth开发者账户
-
连接应⽤到OneAuth
准备⼯作
本教程使⽤了Golang构建程序,所以请留意各项依赖包的版本。
-
Go-OIDC
-
⼀个免费的 OneAuth 账户,如果没有,创建开发者账户
开发环境准备
⾸先我们使⽤go创建⼀个⼲净的开发环境,并激活该环境
mkdir democd 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 oneauth...")
})
// oneauth认证callback
http.HandleFunc("/oneauth/callback", func(w http.ResponseWriter, r
*http.Request) {
fmt.Println("Oneauth done...")
w.Write([]byte("hahahahhahha"))
})
fmt.Printf("listening on http://%s/", "0.0.0.0:5556")
fmt.Println(http.ListenAndServe(":5556", nil))
}
## 创建OneAuth开发者账户
访问打开注册⻚⾯

输⼊表单信息后提交,会提示输⼊验证码,以确保你没有输错Email地址。此时需要查收你的Email,找
到类似的邮件:

然后继续输⼊你接受到的验证码后,会提示创建成功,再回到你的邮箱,查看⽤户激活邮件.

点击激活,会提示设置管理员密码。设置好之后,⽤你的Email登录。会看到管理员⾯板.

可以看到浏览器地址栏标记⻩⾊的部分,就是你的租户地址了,不仅仅可以通过这个地址访问到管理⾯
板,⽽且后续我们会⽤到这个地址配置协议参数。
连接应⽤到 OneAuth
我们接下来要在 OneAuth 上创建⼀个应⽤。我们选择左侧菜单的【应⽤】然后在⾯板右侧点击【创建应⽤】

我们会看到创建应⽤的弹出框:

我们在这⾥认证⽅式选择 OIDC,应⽤类型选择 Web 应⽤,点击下⼀步:

设置好http应⽤认证后的回调url,点击保存,

将client id和client secret进⾏保存,后续在http应⽤中设置认证时需要⽤到。然后点击授权⽤户,

设置⽤户的授权。

给需要的⽤户设置授权授权后可以在⻚⾯看到已授权的⽤户.

我们在代码中增加oneauth认证跳转部分:
package mainimport (
"fmt"
"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.oneauth.cn/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/oneauth/callback",
Scopes: []string{oidc.ScopeOpenID, "profile", "email"},
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Println("Ready goto oneauth...")
http.Redirect(w, r, config.AuthCodeURL(""), http.StatusFound)
})
http.HandleFunc("/oneauth/callback", func(w http.ResponseWriter, r *http.Request) {
fmt.Println("Oneauth done...") w.Write([]byte("hahahahhahha"))
})
fmt.Printf("listening on http://%s/", "0.0.0.0:5556")
fmt.Println(http.ListenAndServe(":5556", nil))}
运⾏起来后,我们访问/路由,会跳转到oneauth的认证⻚⾯。

输⼊你的 OneAuth 开发者⽤户名和密码以登录你的http应⽤。⼀切顺利的话,你会看到跳转到路由后
显示的信息

总结
我们通过 go 构建了⼀个简单的应⽤,利⽤Open ID Connect 协议并对接 OneAuth 提供的身份服务,
实现了保护我们特定路由的⽅法。
参考