expr

Golang与OneAuth IDaaS快速集成身份验证

⽤户身份验证是 Web 应⽤程序中的⼀项基本功能,因此⼈们可以创建和访问⾃⼰的帐户,但不幸的是,身份验证并不总是很容易设置,可能经常错误地实现登录和注销功能。本教程将介绍如何使⽤OneAuth 的统⼀身份验证服务,对多达 1,000 个活动⽤户帐户免费使⽤,它能让我们在 Golang 项⽬中轻松处理⽤户数据。

本节介绍如何使⽤Golang快速与OneAuth集成,将OneAuth作为WEB应⽤程序的⽤户存储库并实现⽤户登录。

主要步骤:

  • 准备⼯作

  • 创建⼀个Golang应⽤

  • 创建OneAuth开发者账户

  • 连接应⽤到OneAuth

准备⼯作

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

开发环境准备

⾸先我们使⽤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 提供的身份服务,

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

参考

go-oidc

OneAuth 开发者指南

 

转载请注明,谢谢