osin alternatives and similar packages
Based on the "Authentication & OAuth" category.
Alternatively, view osin alternatives based on common mentions on social networks and blogs.
-
aws-doc-sdk-examples
Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. -
casbin
An authorization library that supports access control models like ACL, RBAC, ABAC in Golang: https://discord.gg/S5UjpzGZjN -
jwt-go
ARCHIVE - Golang implementation of JSON Web Tokens (JWT). This project is now maintained at: -
goth
Package goth provides a simple, clean, and idiomatic way to write authentication packages for Go web applications. -
go-oauth2-server
A standalone, specification-compliant, OAuth2 server written in Golang. -
loginsrv
JWT login microservice with plugable backends such as OAuth2, Google, Github, htpasswd, osiam, .. -
gorbac
goRBAC provides a lightweight role-based access control (RBAC) implementation in Golang. -
permissions2
:closed_lock_with_key: Middleware for keeping track of users, login states and permissions -
jwt-auth
This package provides json web token (jwt) middleware for goLang http servers -
yubigo
Yubigo is a Yubikey client API library that provides an easy way to integrate the Yubico Yubikey into your existing Go-based user authentication infrastructure. -
sessions
A dead simple, highly performant, highly customizable sessions middleware for go http servers. -
Facecontrol
Simple authentication, single sign-on and (optinal) authorization solution.
Updating dependencies is time-consuming.
Do you think we are missing an alternative of osin or a related project?
Popular Comparisons
README
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
import (
"github.com/RangelReale/osin"
ex "github.com/RangelReale/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 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:
License
The code is licensed using "New BSD" license.
Author
Rangel Reale [email protected]
Changes
2014-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()
*Note that all licence references and agreements mentioned in the osin README section above
are relevant to that project's source code only.