锋翎文档
Go SDK

快速开始

5 分钟完成 Beacon SSO Go SDK 接入

快速开始

本指南聚焦“怎么用”:

  • 如何导入 SDK
  • 如何注册 SDK 路由
  • 如何给业务接口加鉴权

1. 安装依赖

go get github.com/phalanx-labs/beacon-sso-sdk

2. 配置环境变量

必填: OAuth2 + 基础能力

SSO_CLIENT_ID=your-client-id
SSO_CLIENT_SECRET=your-client-secret
SSO_REDIRECT_URI=http://localhost:8080/api/oauth/callback
SSO_ENDPOINT_AUTH_URI=https://sso.example.com/oauth/authorize
SSO_ENDPOINT_TOKEN_URI=https://sso.example.com/oauth/token
SSO_ENDPOINT_USERINFO_URI=https://sso.example.com/oauth/userinfo
SSO_ENDPOINT_INTROSPECTION_URI=https://sso.example.com/oauth/introspect
SSO_ENDPOINT_REVOCATION_URI=https://sso.example.com/oauth/revoke

必填: gRPC 能力(账户/用户/商户接口)

SSO_GRPC_HOST=sso.example.com
SSO_GRPC_PORT=5566

可选: 使用 Well-Known 自动发现端点

SSO_WELL_KNOWN_URI=https://sso.example.com/.well-known/openid-configuration

配置了 SSO_WELL_KNOWN_URI 后,可由元数据自动发现 OAuth 端点。

3. 启动并挂载路由(完整示例)

package main

import (
	"context"

	xConsts "github.com/bamboo-services/bamboo-base-go/defined/context"
	xReg "github.com/bamboo-services/bamboo-base-go/major/register"
	xRegNode "github.com/bamboo-services/bamboo-base-go/major/register/node"
	xResult "github.com/bamboo-services/bamboo-base-go/major/result"
	"github.com/gin-gonic/gin"
	"github.com/redis/go-redis/v9"
	bSdkMiddleware "github.com/phalanx-labs/beacon-sso-sdk/middleware"
	bSdkRoute "github.com/phalanx-labs/beacon-sso-sdk/route"
	bSdkStartup "github.com/phalanx-labs/beacon-sso-sdk/startup"
	"gorm.io/gorm"
)

func main() {
	// 1) 初始化注册节点(数据库、Redis + SDK 配置)
	nodes := []xRegNode.RegNodeList{
		{Key: xConsts.DatabaseKey, Node: initDatabase},
		{Key: xConsts.RedisClientKey, Node: initRedis},
	}
	nodes = append(nodes, bSdkStartup.NewStartupConfig()...)

	reg := xReg.Register(context.Background(), nodes)

	// 2) 注册业务路由
	reg.Serve.GET("/api/status", func(c *gin.Context) {
		xResult.SuccessHasData(c, "服务正常", gin.H{
			"status": "running",
		})
	})

	// 3) 挂载 SDK 路由(登录、账户、用户)
	sdkRoute := bSdkRoute.NewRoute(reg.Init.Ctx)
	sdkRoute.OAuthRouter(reg.Serve.Group("/api"))
	sdkRoute.AccountRouter(reg.Serve.Group("/api"))
	sdkRoute.UserRouter(reg.Serve.Group("/api"))

	// 4) 给你的业务路由加鉴权中间件
	protected := reg.Serve.Group("/api/private")
	protected.Use(bSdkMiddleware.CheckAuth(reg.Init.Ctx))
	protected.GET("/profile", func(c *gin.Context) {
		token, _ := c.Get("authorization")
		xResult.SuccessHasData(c, "访问成功", gin.H{"token": token})
	})

	// 5) 启动服务
	_ = reg.Serve.Run(":8080")
}

// 数据库初始化节点
func initDatabase(ctx context.Context) (any, error) {
	// TODO: 替换为你的数据库初始化逻辑
	var db *gorm.DB
	return db, nil
}

// Redis 初始化节点
func initRedis(ctx context.Context) (any, error) {
	// TODO: 替换为你的 Redis 初始化逻辑
	var rdb *redis.Client
	return rdb, nil
}

4. SDK 默认路由(按上面示例前缀 /api

路由组方法路径用途
OAuth2GET/api/oauth/login跳转到 SSO 登录
OAuth2GET/api/oauth/callback处理回调,交换令牌
OAuth2POST/api/oauth/logout注销
AccountPOST/api/account/register/email邮箱注册
AccountPOST/api/account/login/password密码登录
AccountPOST/api/account/token/refresh刷新令牌
AccountPOST/api/account/password/change修改密码(需登录)
AccountPOST/api/account/token/revoke注销令牌(需登录)
UserGET/api/user/userinfo获取当前用户(需登录)
UserGET/api/user/by-id按用户 ID 查询(需登录,query: user_id

5. 验证接入

启动服务后,访问以下地址测试:

  1. GET http://localhost:8080/api/status(服务存活)
  2. GET http://localhost:8080/api/oauth/login(跳转 SSO)
  3. Authorization: Bearer <token> 请求 GET /api/private/profile(验证鉴权中间件)

下一步

On this page