Documentation
¶
Overview ¶
Package keycloak provides a Keycloak integration with two complementary clients:
AdminClient: a service-account-backed wrapper around gocloak/v13 for user and realm-role lifecycle management. A service-account token is cached in-memory behind an RWMutex with double-check locking and refreshed on expiry with a configurable safety buffer (default 60 s). Safe for concurrent use.
UMAClient: a stateless UMA 2.0 permission-decision client. Given an end-user access token, it calls the realm token endpoint with the uma-ticket grant type and decision response mode to answer a single resource#scope check.
Basic usage:
admin := keycloak.NewAdminClient(
"https://kc.example.com",
"my-realm",
"svc-account",
"svc-secret",
)
id, err := admin.CreateUser(ctx, keycloak.CreateUserParams{
Username: "alice",
Email: "alice@example.com",
Password: "s3cret",
})
uma := keycloak.NewUMAClient(
"https://kc.example.com/realms/my-realm/protocol/openid-connect/token",
"my-resource-server",
)
allowed, err := uma.Check(ctx, userToken, "document:42", "read")
Index ¶
- Variables
- func RoleNames(roles []*gocloak.Role) []string
- type AdminClient
- func (c *AdminClient) AddRole(ctx context.Context, id, name string) error
- func (c *AdminClient) CreateUser(ctx context.Context, params CreateUserParams) (string, error)
- func (c *AdminClient) GetUser(ctx context.Context, id string) (*gocloak.User, error)
- func (c *AdminClient) InvalidateToken()
- func (c *AdminClient) ListUsers(ctx context.Context, offset, limit int) ([]*gocloak.User, error)
- func (c *AdminClient) RemoveRole(ctx context.Context, id, name string) error
- func (c *AdminClient) Roles(ctx context.Context) ([]*gocloak.Role, error)
- func (c *AdminClient) SendActionsEmail(ctx context.Context, id string, actions []string) error
- func (c *AdminClient) SetEnabled(ctx context.Context, id string, enabled bool) error
- func (c *AdminClient) UpdateUser(ctx context.Context, id string, params UpdateUserParams) error
- func (c *AdminClient) UserRoles(ctx context.Context, id string) ([]*gocloak.Role, error)
- type AdminOption
- type CreateUserParams
- type UMAClient
- type UMAOption
- type UpdateUserParams
Constants ¶
This section is empty.
Variables ¶
View Source
var ( ErrRoleNotFound = errors.New("keycloak: realm role not found") ErrInvalidInput = errors.New("keycloak: invalid input") )
View Source
var ( ErrUMARequestFailed = errors.New("keycloak uma: request failed") ErrUMAResponseInvalid = errors.New("keycloak uma: unexpected response") )
Functions ¶
Types ¶
type AdminClient ¶
type AdminClient struct {
// contains filtered or unexported fields
}
func NewAdminClient ¶
func NewAdminClient( baseURL string, realm string, clientID string, clientSecret string, opts ...AdminOption, ) *AdminClient
func (*AdminClient) AddRole ¶
func (c *AdminClient) AddRole(ctx context.Context, id, name string) error
func (*AdminClient) CreateUser ¶
func (c *AdminClient) CreateUser(ctx context.Context, params CreateUserParams) (string, error)
func (*AdminClient) InvalidateToken ¶
func (c *AdminClient) InvalidateToken()
func (*AdminClient) RemoveRole ¶
func (c *AdminClient) RemoveRole(ctx context.Context, id, name string) error
func (*AdminClient) SendActionsEmail ¶
func (*AdminClient) SetEnabled ¶
func (*AdminClient) UpdateUser ¶
func (c *AdminClient) UpdateUser(ctx context.Context, id string, params UpdateUserParams) error
type AdminOption ¶
type AdminOption func(*AdminClient)
func WithRestyClient ¶
func WithRestyClient(restyClient *resty.Client) AdminOption
func WithTokenSafetyBuffer ¶
func WithTokenSafetyBuffer(buffer time.Duration) AdminOption
type CreateUserParams ¶
type UMAClient ¶
type UMAClient struct {
// contains filtered or unexported fields
}
func NewUMAClient ¶
type UpdateUserParams ¶
Click to show internal directories.
Click to hide internal directories.