Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/openshift/osin
Golang OAuth2 server library
https://github.com/openshift/osin
Last synced: 2 days ago
JSON representation
Golang OAuth2 server library
- Host: GitHub
- URL: https://github.com/openshift/osin
- Owner: openshift
- License: bsd-3-clause
- Created: 2013-09-10T19:52:00.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2024-11-25T12:05:12.000Z (17 days ago)
- Last Synced: 2024-12-02T21:04:53.551Z (9 days ago)
- Language: Go
- Size: 540 KB
- Stars: 1,912
- Watchers: 71
- Forks: 399
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG
- License: LICENSE
Awesome Lists containing this project
- awesome-go - osin - Golang OAuth2 server library. (Authentication and OAuth)
- awesome-go-with-stars - osin - Golang OAuth2 server library. (Authentication and OAuth)
- awesome-Char - osin - Golang OAuth2 server library. (Authentication and OAuth / Contents)
- awesome-go - osin - Golang OAuth2 server library. (Authentication and OAuth)
- fucking-awesome-go - osin - Golang OAuth2 server library. (Authentication and OAuth)
- awesome-go - osin - Golang OAuth2 server library. (Authentication and OAuth)
- awesome-go-cn - osin
- awesome-go - osin
- cybersecurity-golang-security - osin - Golang OAuth2 server library. (Web Framework Hardening)
- awesome-go - osin - Golang OAuth2 server library. Stars:`1.9K`. (Authentication and OAuth)
- awesome-go - osin - Golang OAuth2 server library. (Authentication and OAuth)
- awesome-go-security - osin - Golang OAuth2 server library. (Web Framework Hardening)
- awesome-go - osin - Golang OAuth2 server library. (Authentication and OAuth)
- awesome-go-cn - osin
- awesome-go-cn - osin
- awesome-go-plus - osin - Golang OAuth2 server library. ![stars](https://img.shields.io/badge/stars-1912-blue) (Authentication and OAuth)
- awesome-go-plus - osin - Golang OAuth2 server library. (Authentication and OAuth)
README
OSIN
====[![GoDoc](https://godoc.org/github.com/openshift/osin?status.svg)](https://godoc.org/github.com/openshift/osin)
Golang OAuth2 server library
----------------------------OSIN is an OAuth2 server library for the Go language, as specified at
http://tools.ietf.org/html/rfc6749 and http://tools.ietf.org/html/draft-ietf-oauth-v2-10.It also includes support for PKCE, as specified at https://tools.ietf.org/html/rfc7636,
which increases security for code-exchange flows for public OAuth clients.Using it, you can build your own OAuth2 authentication service.
The library implements the majority of the specification, like authorization and token endpoints, and authorization code, implicit, resource owner and client credentials grant types.
### Example Server
````go
import (
"github.com/openshift/osin"
ex "github.com/openshift/osin/example"
)// ex.NewTestStorage implements the "osin.Storage" interface
server := osin.NewServer(osin.NewServerConfig(), ex.NewTestStorage())// Authorization code endpoint
http.HandleFunc("/authorize", func(w http.ResponseWriter, r *http.Request) {
resp := server.NewResponse()
defer resp.Close()if ar := server.HandleAuthorizeRequest(resp, r); ar != nil {
// HANDLE LOGIN PAGE HERE
ar.Authorized = true
server.FinishAuthorizeRequest(resp, r, ar)
}
osin.OutputJSON(resp, w, r)
})// Access token endpoint
http.HandleFunc("/token", func(w http.ResponseWriter, r *http.Request) {
resp := server.NewResponse()
defer resp.Close()if ar := server.HandleAccessRequest(resp, r); ar != nil {
ar.Authorized = true
server.FinishAccessRequest(resp, r, ar)
}
osin.OutputJSON(resp, w, r)
})http.ListenAndServe(":14000", nil)
````### Example Access
Open in your web browser:
````
http://localhost:14000/authorize?response_type=code&client_id=1234&redirect_uri=http%3A%2F%2Flocalhost%3A14000%2Fappauth%2Fcode
````### Storage backends
There is a mock available at [example/teststorage.go](/example/teststorage.go) which you can use as a guide for writing your own.
You might want to check out other implementations for common database management systems as well:
* [PostgreSQL](https://github.com/ory-am/osin-storage)
* [MongoDB](https://github.com/martint17r/osin-mongo-storage)
* [RethinkDB](https://github.com/ahmet/osin-rethinkdb)
* [DynamoDB](https://github.com/uniplaces/osin-dynamodb)
* [Couchbase](https://github.com/elgris/osin-couchbase-storage)
* [MySQL](https://github.com/felipeweb/osin-mysql)
* [Redis](https://github.com/ShaleApps/osinredis)### License
The code is licensed using "New BSD" license.
### Author
Rangel Reale
[email protected]### Changes
2019-05-13
==========
* NON-BREAKING CHANGES
- Updated imports in examples to use github.com/openshift/osin instead of github.com/RangelReale/osin2014-06-25
==========
* BREAKING CHANGES:
- Storage interface has 2 new methods, Clone and Close, to better support storages
that need to clone / close in each connection (mgo)
- Client was changed to be an interface instead of an struct. Because of that,
the Storage interface also had to change, as interface is already a pointer.- HOW TO FIX YOUR CODE:
+ In your Storage, add a Clone function returning itself, and a do nothing Close.
+ In your Storage, replace all *osin.Client with osin.Client (remove the pointer reference)
+ If you used the osin.Client struct directly in your code, change it to osin.DefaultClient,
which is a struct with the same fields that implements the interface.
+ Change all accesses using osin.Client to use the methods instead of the fields directly.
+ You MUST defer Response.Close in all your http handlers, otherwise some
Storages may not clean correctly.resp := server.NewResponse()
defer resp.Close()