lib

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 5, 2026 License: Apache-2.0 Imports: 12 Imported by: 0

README

lib パッケージ — SaaSus 認証ヘルパー

lib パッケージはSaaSusの認証を簡単に設定するためのヘルパーを提供します。 このパッケージの全ファイルはSDKジェネレーターによって変更されません。

クライアントの設定

WithSaaSusAuth()

環境変数(SAASUS_API_KEYSAASUS_SECRET_KEYSAASUS_SAAS_ID)から 認証情報を自動で読み取り、SigV1署名ミドルウェアを設定します。

import (
    saasusstainless "github.com/Anti-Pattern-Inc/saasus-stainless-go"
    "github.com/Anti-Pattern-Inc/saasus-stainless-go/lib"
)

client := saasusstainless.NewClient(lib.WithSaaSusAuth()...)

必要な環境変数:

環境変数 説明
SAASUS_API_KEY APIキー
SAASUS_SECRET_KEY SigV1署名用シークレットキー
SAASUS_SAAS_ID SaaS ID
WithSaaSusAuthConfig()

環境変数の代わりに直接値を指定する場合に使います。

client := saasusstainless.NewClient(
    lib.WithSaaSusAuthConfig("api-key", "secret-key", "saas-id")...,
)

認証ミドルウェア

AuthMiddleware()

SaaSus IDトークンを検証し、ユーザー情報をコンテキストに格納する net/http 互換のミドルウェアを返します。

  • Authorization: Bearer <id_token> ヘッダーからIDトークンを取得
  • SaaSus APIでトークンを検証してユーザー情報を取得
  • 検証成功: ユーザー情報をコンテキストに格納して次のハンドラーへ
  • 検証失敗: 401 Unauthorized を返す
標準 net/http での使用
import (
    "fmt"
    "net/http"

    saasusstainless "github.com/Anti-Pattern-Inc/saasus-stainless-go"
    "github.com/Anti-Pattern-Inc/saasus-stainless-go/lib"
)

func main() {
    client := saasusstainless.NewClient(lib.WithSaaSusAuth()...)

    mux := http.NewServeMux()
    mux.HandleFunc("/api/me", func(w http.ResponseWriter, r *http.Request) {
        userInfo, _ := lib.GetUserInfo(r.Context())
        fmt.Fprintf(w, "ユーザーID: %s", userInfo.ID)
    })

    http.ListenAndServe(":8080", lib.AuthMiddleware(&client)(mux))
}
Echo フレームワークでの使用

echo.WrapMiddleware() を使うことで Echo にも組み込めます。 Echo 自体をこのSDKの依存に追加する必要はありません。

import (
    "net/http"

    "github.com/labstack/echo/v4"
    saasusstainless "github.com/Anti-Pattern-Inc/saasus-stainless-go"
    "github.com/Anti-Pattern-Inc/saasus-stainless-go/lib"
)

func main() {
    client := saasusstainless.NewClient(lib.WithSaaSusAuth()...)

    e := echo.New()
    e.Use(echo.WrapMiddleware(lib.AuthMiddleware(&client)))

    e.GET("/api/me", func(c echo.Context) error {
        userInfo, ok := lib.GetUserInfo(c.Request().Context())
        if !ok {
            return echo.ErrInternalServerError
        }
        return c.JSON(http.StatusOK, userInfo)
    })

    e.Start(":8080")
}
GetUserInfo()

AuthMiddleware によってコンテキストに格納されたユーザー情報を取得します。

// net/http
userInfo, ok := lib.GetUserInfo(r.Context())

// Echo
userInfo, ok := lib.GetUserInfo(c.Request().Context())

戻り値の *saasusstainless.UserinfoGetResponse にはユーザーID・メールアドレス・ テナント情報・ロール情報などが含まれています。

SigV1 署名

SigV1Middleware() はSaaSus APIのSigV1 HMAC-SHA256署名を全リクエストに付与します。 通常は WithSaaSusAuth() / WithSaaSusAuthConfig() 経由で自動設定されるため、 直接使用する必要はありません。

Documentation

Index

Constants

View Source
const (
	// RefererContextKey はRefererヘッダーの値をコンテキストに格納するためのキー
	RefererContextKey contextKey = "referer"

	// XSaaSusRefererContextKey はX-SaaSus-Refererヘッダーの値をコンテキストに格納するためのキー
	XSaaSusRefererContextKey contextKey = "xSaaSusReferer"
)
View Source
const DefaultReferer = "https://api.saasus.io/"

DefaultReferer はSaaSus APIのデフォルトReferer値

View Source
const SigV1Prefix = "SAASUSSIGV1"

SigV1Prefix はSigV1認証ヘッダーのプレフィックス

Variables

This section is empty.

Functions

func AuthMiddleware

func AuthMiddleware(client *saasusstainless.Client) func(http.Handler) http.Handler

AuthMiddleware はSaaSus IDトークンを検証し、ユーザー情報をコンテキストに格納する net/http 互換のミドルウェアを返す。

Authorization: Bearer <id_token> ヘッダーからトークンを取得し、 SaaSus APIでユーザー情報を取得してコンテキストに格納する。 トークンが無効または取得に失敗した場合は 401 Unauthorized を返す。

使用例(net/http):

mux := http.NewServeMux()
client := saasusstainless.NewClient(lib.WithSaaSusAuth()...)
http.Handle("/api/", lib.AuthMiddleware(client)(mux))

使用例(Echo):

e := echo.New()
e.Use(echo.WrapMiddleware(lib.AuthMiddleware(client)))

func ComputeSignature

func ComputeSignature(secretKey, apiKey, method, rawURL string, body []byte) string

ComputeSignature はSigV1のHMAC-SHA256署名を計算する。

署名対象データ(この順序で連結):

  1. タイムスタンプ(UTC、YYYYMMDDHHmm形式)
  2. APIキー
  3. HTTPメソッド(大文字)
  4. URLのホスト+パス+クエリ部分("//"以降)
  5. リクエストボディ(存在する場合)

func FormatAuthHeader

func FormatAuthHeader(sig, saasID, apiKey string) string

FormatAuthHeader はSigV1認証ヘッダー文字列を生成する。

フォーマット:

SAASUSSIGV1 Sig=<hex_signature>, SaaSID=<saas_id>, APIKey=<api_key>

func GetUserInfo

GetUserInfo はコンテキストからユーザー情報を取得する。 AuthMiddleware によって格納されたユーザー情報を返す。

使用例(net/http):

func myHandler(w http.ResponseWriter, r *http.Request) {
    userInfo, ok := lib.GetUserInfo(r.Context())
    if !ok {
        http.Error(w, "ユーザー情報が取得できません", http.StatusInternalServerError)
        return
    }
    fmt.Fprintf(w, "ユーザーID: %s", userInfo.ID)
}

使用例(Echo):

func myHandler(c echo.Context) error {
    userInfo, ok := lib.GetUserInfo(c.Request().Context())
    if !ok {
        return echo.ErrInternalServerError
    }
    return c.JSON(http.StatusOK, userInfo)
}

func ParseAuthHeader

func ParseAuthHeader(authHeader string) (sig, saasID, apiKey string, ok bool)

ParseAuthHeader はSigV1 Authorizationヘッダーをパースする。 テスト検証用に公開する。

func RefererMiddleware

func RefererMiddleware(defaultReferer string) func(*http.Request, func(*http.Request) (*http.Response, error)) (*http.Response, error)

RefererMiddleware はRefererヘッダーを付与するStainlessミドルウェアを返す。 コンテキストにReferer値が設定されている場合はそれを使用し、 設定されていない場合はデフォルト値を使用する。

使用例:

client := saasusstainless.NewClient(
    option.WithMiddleware(lib.RefererMiddleware("https://api.saasus.io/")),
)

func SigV1Middleware

func SigV1Middleware(apiKey, secretKey, saasID string) func(*http.Request, func(*http.Request) (*http.Response, error)) (*http.Response, error)

SigV1Middleware はSigV1認証を付与するStainlessミドルウェアを返す。 option.WithMiddleware()で使用する。

使用例:

client := saasusstainless.NewClient(
    option.WithAPIKey("your-api-key"),
    option.WithSecretKey("your-secret-key"),
    option.WithSaasID("your-saas-id"),
    option.WithMiddleware(lib.SigV1Middleware("your-api-key", "your-secret-key", "your-saas-id")),
)

func WithReferer

func WithReferer(ctx context.Context, referer string) context.Context

WithReferer はコンテキストにReferer値を設定する。 SigV1ミドルウェアと併用して、リクエストごとに異なるRefererを設定する場合に使用する。

func WithSaaSusAuth

func WithSaaSusAuth() []option.RequestOption

WithSaaSusAuth は環境変数からSigV1認証パラメータを読み取り、 SigV1認証ミドルウェアとRefererミドルウェアを返す。

必要な環境変数:

  • SAASUS_API_KEY: APIキー
  • SAASUS_SECRET_KEY: シークレットキー
  • SAASUS_SAAS_ID: SaaS ID

使用例:

client := saasusstainless.NewClient(
    lib.WithSaaSusAuth()...,
)

func WithSaaSusAuthConfig

func WithSaaSusAuthConfig(apiKey, secretKey, saasID string) []option.RequestOption

WithSaaSusAuthConfig は指定されたパラメータでSigV1認証ミドルウェアと Refererミドルウェアを設定するRequestOptionスライスを返す。

使用例:

client := saasusstainless.NewClient(
    lib.WithSaaSusAuthConfig("api-key", "secret-key", "saas-id")...,
)

func WithXSaaSusReferer

func WithXSaaSusReferer(ctx context.Context, referer string) context.Context

WithXSaaSusReferer はコンテキストにX-SaaSus-Referer値を設定する。

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL