GitHub - udhos/oauth2: https://github.com/udhos/oauth2 implements the oauth2 cli...
source link: https://github.com/udhos/oauth2
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
oauth2
https://github.com/udhos/oauth2 implements the oauth2 client_credentials flow with singleflight and plugable cache interface.
Created by gh-md-toc
Features
- oauth2 client_credentials flow.
- plugable cache.
- default memory cache.
- filesystem cache.
- testing-only error cache.
- redis cache.
- singleflight.
- debug logs.
Usage
import "github.com/udhos/oauth2/clientcredentials"
import "github.com/udhos/oauth2/cache/rediscache"
cache, errRedis := rediscache.New("localhost:6379::my-cache-key")
if errRedis != nil {
log.Fatalf("redis: %v", errRedis)
}
options := clientcredentials.Options{
TokenURL: "https://token-server/token",
ClientID: "client-id",
ClientSecret: "client-secret",
Scope: "scope1 scope2",
HTTPClient: http.DefaultClient,
Cache: cache,
}
client := clientcredentials.New(options)
req, errReq := http.NewRequestWithContext(context.TODO(), "GET", "https://server/resource", nil)
if errReq != nil {
log.Fatalf("request: %v", errReq)
}
resp, errDo := client.Do(req)
if errDo != nil {
log.Fatalf("do: %v", errDo)
}
defer resp.Body.Close()
Example client
See cmd/oauth2-client-example/main.go.
Test with example client
Test using this token server: https://oauth.tools/collection/1599045253169-GHF
go install github.com/udhos/oauth2/cmd/oauth2-client-example@latest
oauth2-client-example -tokenURL https://login-demo.curity.io/oauth/v2/oauth-token -clientID demo-backend-client -clientSecret MJlO3binatD9jk1
oauth2-client-example -tokenURL https://login-demo.curity.io/oauth/v2/oauth-token -clientID demo-backend-client -clientSecret MJlO3binatD9jk1 -cache file:/tmp/cache
oauth2-client-example -tokenURL https://login-demo.curity.io/oauth/v2/oauth-token -clientID demo-backend-client -clientSecret MJlO3binatD9jk1 -cache error
oauth2-client-example -tokenURL https://login-demo.curity.io/oauth/v2/oauth-token -clientID demo-backend-client -clientSecret MJlO3binatD9jk1 -cache redis:localhost:6379::
oauth2-client-example -tokenURL https://login-demo.curity.io/oauth/v2/oauth-token -clientID demo-backend-client -clientSecret MJlO3binatD9jk1 -cache redis:localhost:6379::oauth2-client-example
Test singleflight with example client
Run token server at: http://localhost:8080/oauth/token
Run server at: http://localhost:8000/v1/hello
Cache error makes sure every request retrieves a new token: -cache error
.
- Send requests with singlefligh:
oauth2-client-example -tokenURL http://localhost:8080/oauth/token -targetURL http://localhost:8000/v1/hello -cache error -interval 0 -concurrent -count 10
- Send requests WITHOUT singlefligh:
oauth2-client-example -tokenURL http://localhost:8080/oauth/token -targetURL http://localhost:8000/v1/hello -cache error -interval 0 -concurrent -count 10 -disableSingleflight
Test caches
Set the cache with the env var CACHE
, then run the tests.
# Test file cache
export CACHE=file:/tmp/cache
go test -race ./...
# Test redis cache
./run-redis-local.sh
export CACHE=redis:localhost:6379::oauth2-client-example
go test -race ./...
Development
git clone https://github.com/udhos/oauth2
cd oauth2
./build.sh
References
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK