Link Search Menu Expand Document

Golang快速集成OneAuth

  1. Golang快速集成OneAuth
    1. 准备⼯作
    2. 开发环境准备
    3. 连接应⽤到 OneAuth
    4. 总结
    5. 参考

本教程将介绍如何使⽤OneAuth 的统⼀身份验证服务,它能让我们在 Golang 项⽬中轻松处理⽤户数据。

⽤户身份验证是 Web 应⽤程序中的⼀项基本功能,因此⼈们可以创建和访问⾃⼰的帐户,但不幸的是,身份验证并不总是很容易设置,可能经常错误地实现登录和注销功能。以下介绍如何使⽤Golang快速与OneAuth集成,将OneAuth作为WEB应⽤程序的⽤户存储库并实现⽤户登录。

准备⼯作

本教程使⽤了Golang构建程序,所以请留意各项依赖包的版本。

  • Go-OIDC
  • ⼀个免费的 OneAuth 账户,如果没有,免费创建
  • 已有或新建的Web应用程序或项目,需要集成认证流程
  • 或可使用本教程代码示例 Oneauth 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 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

我们接下来要在 OneAuth 上创建⼀个应⽤。我们选择左侧菜单的【应⽤】然后在⾯板右侧点击【创建应⽤】

Step 1:点击创建应⽤,在弹出框中选择认证⽅式 OIDC,选择应⽤类型 Web 应⽤,点击下⼀步

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

Step 3:查看client idclient secret,后续在http应⽤中设置认证时需要⽤到。

Step 4:然后点击授权⽤户,设置⽤户的授权。

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

⚠️特别步骤:我们需要增加一个安全域,CORS防止调试时被浏览器拦截,点击左侧菜单【API】选择【安全域】

然后点击右侧的【添加域】根据下面的图示输入:

image

我们在代码中增加OneAuth认证跳转部分:

package main

import (

"fmt"起来后我们访问/路由会跳转到oneauth的认证⻚⾯

"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 提供的身份服务,

实现了保护我们特定路由的⽅法。

参考

go-oidc