echoserver

package module
v0.0.0-...-b1f19bd Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 31, 2024 License: MIT Imports: 5 Imported by: 0

README

Echo OAuth 2.0 Server

Using Echo framework implementation OAuth 2.0 services

License ReportCard

Quick Start

Download and install
$ go get github.com/dasjott/oauth2-echo-server
Create file server.go
package main

import (
	"net/http"

	echoserver "github.com/dasjott/oauth2-echo-server"
	"github.com/labstack/echo/v4"
	"github.com/go-oauth2/oauth2/v4/manage"
	"github.com/go-oauth2/oauth2/v4/models"
	"github.com/go-oauth2/oauth2/v4/server"
	"github.com/go-oauth2/oauth2/v4/store"
)

func main() {
	manager := manage.NewDefaultManager()

	// token store
	manager.MustTokenStorage(store.NewFileTokenStore("data.db"))

	// client store
	clientStore := store.NewClientStore()
	clientStore.Set("000000", &models.Client{
		ID:     "000000",
		Secret: "999999",
		Domain: "http://localhost",
	})
	manager.MapClientStorage(clientStore)

	// Initialize the oauth2 service
	echoserver.InitServer(manager)
	echoserver.SetAllowGetAccessRequest(true)
	echoserver.SetClientInfoHandler(server.ClientFormHandler)

	e := echo.New()

	auth := e.Group("/oauth2")
	{
		auth.GET("/token", echoserver.HandleTokenRequest)
	}

	api := e.Group("/api")
	{
		api.Use(echoserver.TokenHandler())
		api.GET("/test", func(c echo.Context) error {
			ti := c.Get(echoserver.DefaultConfig.TokenKey)
			if ti != "" {
				return c.JSON(http.StatusOK, ti)
			}
			return echo.NewHTTPError(http.StatusNotFound, "token not found")
		})
	}

	e.Logger.Fatal(e.Start(":9096"))
}
Build and run
$ go build server.go
$ ./server
Open in your web browser
The token information
http://localhost:9096/oauth2/token?grant_type=client_credentials&client_id=000000&client_secret=999999&scope=read
{
    "access_token": "AJPNSQO2PCITABYX0RFLWG",
    "expires_in": 7200,
    "scope": "read",
    "token_type": "Bearer"
}
The authentication token
http://localhost:9096/api/test?access_token=AJPNSQO2PCITABYX0RFLWG
{
    "ClientID": "000000",
    "UserID": "",
    "RedirectURI": "",
    "Scope": "read",
    "Code": "",
    "CodeCreateAt": "0001-01-01T00:00:00Z",
    "CodeExpiresIn": 0,
    "Access": "AJPNSQO2PCITABYX0RFLWG",
    "AccessCreateAt": "2016-11-29T09:00:52.617250916+08:00",
    "AccessExpiresIn": 7200000000000,
    "Refresh": "",
    "RefreshCreateAt": "0001-01-01T00:00:00Z",
    "RefreshExpiresIn": 0
}

MIT License

Copyright (c) 2016 Lyric

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// DefaultConfig is the default middleware config.
	DefaultConfig = Config{
		TokenKey: "token",
		Skipper: func(_ echo.Context) bool {
			return false
		},
	}
)

Functions

func HandleAuthorizeRequest

func HandleAuthorizeRequest(c echo.Context) error

HandleAuthorizeRequest the authorization request handling

func HandleTokenRequest

func HandleTokenRequest(c echo.Context) error

HandleTokenRequest token request handling

func InitServer

func InitServer(manager *manage.Manager) *server.Server

InitServer Initialize the service

func SetAccessTokenExpHandler

func SetAccessTokenExpHandler(handler server.AccessTokenExpHandler)

SetAccessTokenExpHandler set expiration date for the access token

func SetAllowGetAccessRequest

func SetAllowGetAccessRequest(allow bool)

SetAllowGetAccessRequest to allow GET requests for the token

func SetAllowedGrantType

func SetAllowedGrantType(types ...oauth2.GrantType)

SetAllowedGrantType allow the grant types

func SetAllowedResponseType

func SetAllowedResponseType(types ...oauth2.ResponseType)

SetAllowedResponseType allow the authorization types

func SetAuthorizeScopeHandler

func SetAuthorizeScopeHandler(handler server.AuthorizeScopeHandler)

SetAuthorizeScopeHandler set scope for the access token

func SetClientAuthorizedHandler

func SetClientAuthorizedHandler(handler server.ClientAuthorizedHandler)

SetClientAuthorizedHandler check the client allows to use this authorization grant type

func SetClientInfoHandler

func SetClientInfoHandler(handler server.ClientInfoHandler)

SetClientInfoHandler get client info from request

func SetClientScopeHandler

func SetClientScopeHandler(handler server.ClientScopeHandler)

SetClientScopeHandler check the client allows to use scope

func SetExtensionFieldsHandler

func SetExtensionFieldsHandler(handler server.ExtensionFieldsHandler)

SetExtensionFieldsHandler in response to the access token with the extension of the field

func SetInternalErrorHandler

func SetInternalErrorHandler(handler server.InternalErrorHandler)

SetInternalErrorHandler internal error handling

func SetPasswordAuthorizationHandler

func SetPasswordAuthorizationHandler(handler server.PasswordAuthorizationHandler)

SetPasswordAuthorizationHandler get user id from username and password

func SetRefreshingScopeHandler

func SetRefreshingScopeHandler(handler server.RefreshingScopeHandler)

SetRefreshingScopeHandler check the scope of the refreshing token

func SetResponseErrorHandler

func SetResponseErrorHandler(handler server.ResponseErrorHandler)

SetResponseErrorHandler response error handling

func SetTokenType

func SetTokenType(tokenType string)

SetTokenType token type

func SetUserAuthorizationHandler

func SetUserAuthorizationHandler(handler server.UserAuthorizationHandler)

SetUserAuthorizationHandler get user id from request authorization

func TokenHandler

func TokenHandler() echo.MiddlewareFunc

TokenHandler gets the token from request using default config

func TokenHandlerWithConfig

func TokenHandlerWithConfig(cfg *Config) echo.MiddlewareFunc

TokenHandlerWithConfig gets the token from request with given config

Types

type Config

type Config struct {
	// keys stored in the context
	TokenKey string
	// defines a function to skip middleware.Returning true skips processing
	// the middleware.
	Skipper func(echo.Context) bool
}

Config for middleware

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL