go-stnscはSNTS APIクライアントとSTNS認証機能を提供します。
go-stnsc
はSTNS v2 JSONフォーマットに対応しています。
概要
STNSは、Linuxユーザログインを目的に作成された認証プロトコルです。
プロトコルとしてはLinuxユーザログインに限定されているものではなく、名前解決全般に利用することができます。
そのため自作Webサービスのログインの認証にも用いることが可能です。そこでGolangからSTNSのAPIを叩くためのライブラリを作成しました。
またSTNSプロトコルは基本的にサーバサイドの情報を取得するだけであり、認証はクライアント側で実装する必要があるのでAuthenticate
メソッドも実装しました。
実行例
API
- Client Code:
以下のSTNSサーバを起動している場合の実行結果です。 stnsc.conf
func main() {
client, err := stnsc.NewClient("http://localhost:1104/v2/", nil)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
var err error
var attrUsers stns.Attributes
attrUsers, err = client.User.List()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Printf("Attributes users : %#v\n", attrUsers)
fmt.Printf("Attribute user : %#v\n", attrUsers["foo"])
var attrUser *stns.Attribute
attrUser, err = client.User.Get("foo")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Printf("Attribute user : %#v\n", attrUser)
fmt.Printf("user : %#v\n", attrUser.User)
attrUser, err = client.User.GetById(1002)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Printf("Attribute user : %#v\n", attrUser)
fmt.Printf("user : %#v\n", attrUser.User)
}
- Output:
Attributes users : stns.Attributes{"bar":(*stns.Attribute)(0xc4200e01e0), "foo":(*stns.Attribute)(0xc4200e02a0)}
Attribute user : &stns.Attribute{Id:1001, User:(*stns.User)(0xc4200f0180), Group:(*stns.Group)(nil)}
Attribute user : &stns.Attribute{Id:1001, User:(*stns.User)(0xc420152000), Group:(*stns.Group)(nil)}
user : &stns.User{Password:"$6$RNqhn2ttIfMcRj4r$Ddnbckw1T1xUkguDWvSsb3GZseoeahRbr27vKbYV9opja2SKWi6y.67YI0yXz8HremKCpJwwFEOqed6Eic9.0.", GroupId:1002, Directory:"/home/foo", Shell:"/bin/bash", Gecos:"description", Keys:[]string{"key"}, LinkUsers:[]string{"linkuser"}}
Attribute user : &stns.Attribute{Id:1002, User:(*stns.User)(0xc4200f0480), Group:(*stns.Group)(nil)}
user : &stns.User{Password:"$6$gu42K/pg0o7NBP9O$NshQ3iHO4gE3av9.tkE6DWCgA0h1vG1TzH.SHfQn.TEZpmFBVSD0G7pnH3SGKj22RFz5qiy3ezMg6UQ6JJejE.", GroupId:1002, Directory:"/home/bar", Shell:"/bin/bash", Gecos:"description", Keys:[]string{"key"}, LinkUsers:[]string{"linkuser"}}
またSTNSサーバはBasic認証を設定することが可能です。その場合は以下のようにユーザとパスワードを指定してください。
func main() {
tp := &stnsc.BasicAuthTransport{
Username: "basicuser",
Password: "basicpass",
}
client, err := stnsc.NewClient("http://localhost:1104/v2/", tp.Client())
if err != nil {
fmt.Println(err)
os.Exit(1)
}
他のAPIの使い方はこちらのexampleを参考にしてください。 example/main.go
認証
あたなのWebサービスに簡単にログイン認証機構を提供することができます。
- Client Code:
func main() {
client, err := stnsc.NewClient("http://localhost:1104/v2/", nil)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
var err error
var attrUser *stns.Attribute
attrUser, err = client.User.Authenticate("foo", "foopass")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Printf("Attribute user : %#v\n", attrUser)
fmt.Printf("user : %#v\n", attrUser.User)
}
- Output:
user : &stns.User{Password:"$6$72qH5tfJta43J1lH$o1OvvIxkDCNZtrAh3UWM9dKkGawTuBeGpLoxRuICH6B/9.Y5PA/bD
tvm.fK/bB8zFNNofus6jQHXzMyiqCCqj0", GroupId:1001, Directory:"/home/example", Shell:"/bin/bash", Gecsoo:"", Keys:[]string{"ssh-rsa XXXXX…"}, LinkUsers:[]string{"foo"}}
デモ
実際に実行する方法は、以下の通りです。
-
Create STNS Server
-
Client
$ go get -v github.com/sona-tar/go-stnsc
$ cd ${GOPATH}/src/github.com/sona-tar/go-stnsc/example
$ go run main.go