Mongo Storage for OAuth 2.0
$ go get -u -v gopkg.in/go-oauth2/mongo.v3
import( "github.com/go-oauth2/oauth2/v4/manage" "github.com/go-oauth2/oauth2/v4/server" mongo "gopkg.in/go-oauth2/mongo.v3" ) func main(){ manager := manage.NewDefaultManager() /* * only for a MongoDB replicaSet deployment * Using a replicaSet is recommended as it allows for MongoDB's native support for transactions **/ // mongoConf := mongo.NewConfigReplicaSet( // "mongodb://localhost:27017,localhost:28017,localhost:29017/?replicaSet=myReplicaSet", // "oauth2", // ) // set connectionTimeout(7s) and the requestsTimeout(5s) // is optional storeConfigs := mongo.NewStoreConfig(7, 5) /* * for a single mongoDB node * if the oauth2 service is deployed with more than one instance * each mongoConf should have unique serviceName **/ mongoConf := mongo.NewConfigNonReplicaSet( "mongodb://127.0.0.1:27017", "oauth2", // database name "admin", // username to authenticate with db "password", // password to authenticate with db "serviceName", ) // use mongodb token store manager.MapTokenStorage( mongo.NewTokenStore(mongoConf, storeConfigs), // with timeout // mongo.NewTokenStore(mongoConf), // no timeout ) clientStore := mongo.NewClientStore(mongoConf, storeConfigs) // with timeout // clientStore := mongo.NewClientStore(mongoConf) // no timeout manager.MapClientStorage(clientStore) // register a service clientStore.Create(&models.Client{ ID: idvar, Secret: secretvar, Domain: domainvar, UserID: "frontend", }) // register a second service clientStore.Create(&models.Client{ ID: idPreorder, Secret: secretPreorder, Domain: domainPreorder, UserID: "prePost", }) srv := server.NewServer(server.NewConfig(), manager) // ... }
Copyright (c) 2016 Lyric