gocloaksession

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

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

Go to latest
Published: Apr 14, 2023 License: Apache-2.0 Imports: 6 Imported by: 0

README

gocloaksession

This client uses: gocloak and resty

Installation

go get github.com/Clarilab/gocloaksession

Importing

import "github.com/Clarilab/gocloaksession"

Features

// GoCloakSession holds all callable methods
type GoCloakSession interface {
	// GetKeycloakAuthToken returns a JWT object, containing the AccessToken and more
	GetKeycloakAuthToken() (*gocloak.JWT, error)

	// Sets the Authentication Header for the response
	// Can be used as Middleware in resty
	AddAuthTokenToRequest(*resty.Client, *resty.Request) error

	// GetGoCloakInstance returns the currently used GoCloak instance.
	GetGoCloakInstance() gocloak.GoCloak

	// ForceAuthenticate ignores all checks and executes an authentication.
	ForceAuthenticate() error

	// ForceRefresh ignores all checks and executes a refresh.
	ForceRefresh() error
}

See https://github.com/Nerzal/gocloak/blob/master/token.go for complete JWT struct.

Example

// Create a new session
session := NewSession(clientId, clientSecret, realm, uri)

// Authenticate or refresh the token
token, err := session.GetKeycloakAuthToken()

If you want to use it as middleware in resty, you can use the following example

session := NewSession(clientId, clientSecret, realm, uri)

restyClient.OnBeforeRequest(session.AddAuthTokenToRequest)

In case you need the GoCloak instance to execute your own commands.

gocloakInstance := session.GetGoCloakInstance()

Developing & Testing

For local testing you need to start a docker container. Simply run following commands prior to starting the tests:

docker pull quay.io/keycloak/keycloak:latest
docker run -d \
    -e KEYCLOAK_ADMIN=admin \
    -e KEYCLOAK_ADMIN_PASSWORD=secret \
    -v "$(pwd)/testdata:/opt/keycloak/data/import" \
    -p 8080:8080 \
    --name gocloak-test \
    quay.io/keycloak/keycloak:latest start-dev --import-realm

go test

To remove running docker container after completion of tests:

docker stop gocloak-test
docker rm gocloak-test

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CallOption

type CallOption func(*goCloakSession) error

CallOption configures a Session

func PrematureRefreshThresholdOption

func PrematureRefreshThresholdOption(accessToken, refreshToken time.Duration) CallOption

PrematureRefreshThresholdOption sets the threshold for a premature token refresh

func RequestSkipperCallOption

func RequestSkipperCallOption(requestSkipper RequestSkipper) CallOption

RequestSkipperCallOption appends a RequestSkipper to the skipConditions

func SetGocloak

func SetGocloak(gc *gocloak.GoCloak) CallOption

SetGocloak sets the goCloak instance

type GoCloakSession

type GoCloakSession interface {
	// GetKeycloakAuthToken returns a JWT object, containing the AccessToken and more
	GetKeycloakAuthToken() (*gocloak.JWT, error)

	// AddAuthTokenToRequest sets the Authentication Header for the response
	AddAuthTokenToRequest(*resty.Client, *resty.Request) error

	// GetGoCloakInstance returns the currently used GoCloak instance.
	GetGoCloakInstance() *gocloak.GoCloak

	// ForceAuthenticate ignores all checks and executes an authentication.
	ForceAuthenticate() error

	// ForceRefresh ignores all checks and executes a refresh.
	ForceRefresh() error
}

GoCloakSession holds all callable methods

func NewAdminSession

func NewAdminSession(username, password, realm, uri string, calloptions ...CallOption) (GoCloakSession, error)

NewSession returns a new instance of a gocloak Session with admin access

func NewSession

func NewSession(clientID, clientSecret, realm, uri string, calloptions ...CallOption) (GoCloakSession, error)

NewSession returns a new instance of a gocloak Session

type RequestSkipper

type RequestSkipper func(*resty.Request) bool

RequestSkipper is a function signature that can be used to skip a certain request if needed.

func SubstringRequestSkipper

func SubstringRequestSkipper(substr string) RequestSkipper

SubstringRequestSkipper is a RequestSkipper that skips a request when the url in the request contains a certain substring

Jump to

Keyboard shortcuts

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