Documentation ¶
Index ¶
- Constants
- Variables
- func ExtractBearerToken(r *http.Request) (string, error)
- func GenClientID(hostport string) (string, error)
- func NewClaims(iss, sub string, aud interface{}, iat, exp time.Time) jose.Claims
- func NewHTTPProviderConfigGetter(hc phttp.Client, issuerURL string) *httpProviderConfigGetter
- func NewRemotePublicKeyRepo(hc phttp.Client, ep string) *remotePublicKeyRepo
- func VerifyClaims(jwt jose.JWT, issuer, clientID string) error
- func VerifyClientClaims(jwt jose.JWT, issuer string) (string, error)
- func VerifySignature(jwt jose.JWT, keys []key.PublicKey) (bool, error)
- type AuthenticatedTransport
- type Client
- func (c *Client) ClientCredsToken(scope []string) (jose.JWT, error)
- func (c *Client) ExchangeAuthCode(code string) (jose.JWT, error)
- func (c *Client) Healthy() error
- func (c *Client) OAuthClient() (*oauth2.Client, error)
- func (c *Client) RefreshToken(refreshToken string) (jose.JWT, error)
- func (c *Client) SyncProviderConfig(discoveryURL string) chan struct{}
- func (c *Client) VerifyJWT(jwt jose.JWT) error
- type ClientConfig
- type ClientCredentials
- type ClientCredsTokenRefresher
- type ClientIdentity
- type ClientMetadata
- type ClientRegistrationResponse
- type Identity
- type JWAOptions
- type JWTVerifier
- type LoginFunc
- type ProviderConfig
- func (p ProviderConfig) Defaults() ProviderConfig
- func (p ProviderConfig) Empty() bool
- func (p *ProviderConfig) MarshalJSON() ([]byte, error)
- func (p ProviderConfig) Supports(c ClientMetadata) error
- func (p ProviderConfig) SupportsGrantType(grantType string) bool
- func (p *ProviderConfig) UnmarshalJSON(data []byte) error
- func (p ProviderConfig) Valid() error
- type ProviderConfigGetter
- type ProviderConfigSetter
- type ProviderConfigSyncer
- type RequestTokenExtractor
- type TokenRefresher
Constants ¶
const ( // Subject Identifier types defined by the OIDC spec. Specifies if the provider // should provide the same sub claim value to all clients (public) or a unique // value for each client (pairwise). // // See: http://openid.net/specs/openid-connect-core-1_0.html#SubjectIDTypes SubjectTypePublic = "public" SubjectTypePairwise = "pairwise" )
const ( MaximumProviderConfigSyncInterval = 24 * time.Hour MinimumProviderConfigSyncInterval = time.Minute )
const DefaultPublicKeySetTTL = 24 * time.Hour
DefaultPublicKeySetTTL is the default TTL set on the PublicKeySet if no Cache-Control header is provided by the JWK Set document endpoint.
Variables ¶
var ( // Default values for omitted provider config fields. // // Use ProviderConfig's Defaults method to fill a provider config with these values. DefaultGrantTypesSupported = []string{oauth2.GrantTypeAuthCode, oauth2.GrantTypeImplicit} DefaultResponseModesSupported = []string{"query", "fragment"} DefaultTokenEndpointAuthMethodsSupported = []string{oauth2.AuthMethodClientSecretBasic} DefaultClaimTypesSupported = []string{"normal"} )
var (
DefaultScope = []string{"openid", "email", "profile"}
)
Functions ¶
func ExtractBearerToken ¶
ExtractBearerToken is a RequestTokenExtractor which extracts a bearer token from a request's Authorization header.
func GenClientID ¶
func NewRemotePublicKeyRepo ¶
NewRemotePublicKeyRepo is responsible for fetching the JWK Set document.
func VerifyClaims ¶
Verify claims in accordance with OIDC spec http://openid.net/specs/openid-connect-basic-1_0.html#IDTokenValidation
func VerifyClientClaims ¶
VerifyClientClaims verifies all the required claims are valid for a "client credentials" JWT. Returns the client ID if valid, or an error if invalid.
Types ¶
type AuthenticatedTransport ¶
type AuthenticatedTransport struct { TokenRefresher http.RoundTripper // contains filtered or unexported fields }
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
func NewClient ¶
func NewClient(cfg ClientConfig) (*Client, error)
func (*Client) ClientCredsToken ¶
func (*Client) ExchangeAuthCode ¶
ExchangeAuthCode exchanges an OAuth2 auth code for an OIDC JWT ID token.
func (*Client) RefreshToken ¶
RefreshToken uses a refresh token to exchange for a new OIDC JWT ID Token.
func (*Client) SyncProviderConfig ¶
SyncProviderConfig starts the provider config syncer
type ClientConfig ¶
type ClientConfig struct { HTTPClient phttp.Client Credentials ClientCredentials Scope []string RedirectURL string ProviderConfig ProviderConfig KeySet key.PublicKeySet }
type ClientCredentials ¶
type ClientCredentials oauth2.ClientCredentials
type ClientCredsTokenRefresher ¶
type ClientIdentity ¶
type ClientIdentity struct { Credentials ClientCredentials Metadata ClientMetadata }
type ClientMetadata ¶
type ClientMetadata struct { RedirectURIs []url.URL // Required // A list of OAuth 2.0 "response_type" values that the client wishes to restrict // itself to. Either "code", "token", or another registered extension. // // If omitted, only "code" will be used. ResponseTypes []string // A list of OAuth 2.0 grant types the client wishes to restrict itself to. // The grant type values used by OIDC are "authorization_code", "implicit", // and "refresh_token". // // If ommitted, only "authorization_code" will be used. GrantTypes []string // "native" or "web". If omitted, "web". ApplicationType string // List of email addresses. Contacts []mail.Address // Name of client to be presented to the end-user. ClientName string // URL that references a logo for the Client application. LogoURI *url.URL // URL of the home page of the Client. ClientURI *url.URL // Profile data policies and terms of use to be provided to the end user. PolicyURI *url.URL TermsOfServiceURI *url.URL // URL to or the value of the client's JSON Web Key Set document. JWKSURI *url.URL JWKS *jose.JWKSet // URL referencing a flie with a single JSON array of redirect URIs. SectorIdentifierURI *url.URL SubjectType string // Options to restrict the JWS alg and enc values used for server responses and requests. IDTokenResponseOptions JWAOptions UserInfoResponseOptions JWAOptions RequestObjectOptions JWAOptions // Client requested authorization method and signing options for the token endpoint. // // Defaults to "client_secret_basic" TokenEndpointAuthMethod string TokenEndpointAuthSigningAlg string // DefaultMaxAge specifies the maximum amount of time in seconds before an authorized // user must reauthroize. // // If 0, no limitation is placed on the maximum. DefaultMaxAge int64 // RequireAuthTime specifies if the auth_time claim in the ID token is required. RequireAuthTime bool // Default Authentication Context Class Reference values for authentication requests. DefaultACRValues []string // URI that a third party can use to initiate a login by the relaying party. // // See: http://openid.net/specs/openid-connect-core-1_0.html#ThirdPartyInitiatedLogin InitiateLoginURI *url.URL // Pre-registered request_uri values that may be cached by the server. RequestURIs []url.URL }
ClientMetadata holds metadata that the authorization server associates with a client identifier. The fields range from human-facing display strings such as client name, to items that impact the security of the protocol, such as the list of valid redirect URIs.
See http://openid.net/specs/openid-connect-registration-1_0.html#ClientMetadata
TODO: support language specific claim representations http://openid.net/specs/openid-connect-registration-1_0.html#LanguagesAndScripts
func (ClientMetadata) Defaults ¶
func (m ClientMetadata) Defaults() ClientMetadata
Defaults returns a shallow copy of ClientMetadata with default values replacing omitted fields.
func (*ClientMetadata) MarshalJSON ¶
func (m *ClientMetadata) MarshalJSON() ([]byte, error)
func (*ClientMetadata) UnmarshalJSON ¶
func (m *ClientMetadata) UnmarshalJSON(data []byte) error
func (*ClientMetadata) Valid ¶
func (m *ClientMetadata) Valid() error
Valid determines if a ClientMetadata conforms with the OIDC specification.
Valid is called by UnmarshalJSON.
NOTE(ericchiang): For development purposes Valid does not mandate 'https' for URLs fields where the OIDC spec requires it. This may change in future releases of this package. See: https://github.com/coreos/go-oidc/issues/34
type ClientRegistrationResponse ¶
type ClientRegistrationResponse struct { ClientID string // Required ClientSecret string RegistrationAccessToken string RegistrationClientURI string // If IsZero is true, unspecified. ClientIDIssuedAt time.Time // Time at which the client_secret will expire. // If IsZero is true, it will not expire. ClientSecretExpiresAt time.Time ClientMetadata }
func (*ClientRegistrationResponse) MarshalJSON ¶
func (c *ClientRegistrationResponse) MarshalJSON() ([]byte, error)
func (*ClientRegistrationResponse) UnmarshalJSON ¶
func (c *ClientRegistrationResponse) UnmarshalJSON(data []byte) error
type JWAOptions ¶
type JWAOptions struct { // SigningAlg specifies an JWA alg for signing JWTs. // // Specifying this field implies different actions depending on the context. It may // require objects be serialized and signed as a JWT instead of plain JSON, or // require an existing JWT object use the specified alg. // // See: http://openid.net/specs/openid-connect-registration-1_0.html#ClientMetadata SigningAlg string // EncryptionAlg, if provided, specifies that the returned or sent object be stored // (or nested) within a JWT object and encrypted with the provided JWA alg. EncryptionAlg string // EncryptionEnc specifies the JWA enc algorithm to use with EncryptionAlg. If // EncryptionAlg is provided and EncryptionEnc is omitted, this field defaults // to A128CBC-HS256. // // If EncryptionEnc is provided EncryptionAlg must also be specified. EncryptionEnc string }
type JWTVerifier ¶
type JWTVerifier struct {
// contains filtered or unexported fields
}
func NewJWTVerifier ¶
func NewJWTVerifier(issuer, clientID string, syncFunc func() error, keysFunc func() []key.PublicKey) JWTVerifier
type ProviderConfig ¶
type ProviderConfig struct { Issuer *url.URL // Required AuthEndpoint *url.URL // Required TokenEndpoint *url.URL // Required if grant types other than "implicit" are supported UserInfoEndpoint *url.URL KeysEndpoint *url.URL // Required RegistrationEndpoint *url.URL // Servers MAY choose not to advertise some supported scope values even when this // parameter is used, although those defined in OpenID Core SHOULD be listed, if supported. ScopesSupported []string // OAuth2.0 response types supported. ResponseTypesSupported []string // Required // OAuth2.0 response modes supported. // // If omitted, defaults to DefaultResponseModesSupported. ResponseModesSupported []string // OAuth2.0 grant types supported. // // If omitted, defaults to DefaultGrantTypesSupported. GrantTypesSupported []string ACRValuesSupported []string // SubjectTypesSupported specifies strategies for providing values for the sub claim. SubjectTypesSupported []string // Required // JWA signing and encryption algorith values supported for ID tokens. IDTokenSigningAlgValues []string // Required IDTokenEncryptionAlgValues []string IDTokenEncryptionEncValues []string // JWA signing and encryption algorith values supported for user info responses. UserInfoSigningAlgValues []string UserInfoEncryptionAlgValues []string UserInfoEncryptionEncValues []string // JWA signing and encryption algorith values supported for request objects. ReqObjSigningAlgValues []string ReqObjEncryptionAlgValues []string ReqObjEncryptionEncValues []string TokenEndpointAuthMethodsSupported []string TokenEndpointAuthSigningAlgValuesSupported []string DisplayValuesSupported []string ClaimTypesSupported []string ClaimsSupported []string ServiceDocs *url.URL ClaimsLocalsSupported []string UILocalsSupported []string ClaimsParameterSupported bool RequestParameterSupported bool RequestURIParamaterSupported bool RequireRequestURIRegistration bool Policy *url.URL TermsOfService *url.URL // Not part of the OpenID Provider Metadata ExpiresAt time.Time }
ProviderConfig represents the OpenID Provider Metadata specifying what configurations a provider supports.
See: http://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata
func FetchProviderConfig ¶
func FetchProviderConfig(hc phttp.Client, issuerURL string) (ProviderConfig, error)
func WaitForProviderConfig ¶
func WaitForProviderConfig(hc phttp.Client, issuerURL string) (pcfg ProviderConfig)
func (ProviderConfig) Defaults ¶
func (p ProviderConfig) Defaults() ProviderConfig
Defaults returns a shallow copy of ProviderConfig with default values replacing omitted fields.
var cfg oidc.ProviderConfig // Fill provider config with default values for omitted fields. cfg = cfg.Defaults()
func (ProviderConfig) Empty ¶
func (p ProviderConfig) Empty() bool
Empty returns if a ProviderConfig holds no information.
This case generally indicates a ProviderConfigGetter has experienced an error and has nothing to report.
func (*ProviderConfig) MarshalJSON ¶
func (p *ProviderConfig) MarshalJSON() ([]byte, error)
func (ProviderConfig) Supports ¶
func (p ProviderConfig) Supports(c ClientMetadata) error
Supports determines if provider supports a client given their respective metadata.
func (ProviderConfig) SupportsGrantType ¶
func (p ProviderConfig) SupportsGrantType(grantType string) bool
func (*ProviderConfig) UnmarshalJSON ¶
func (p *ProviderConfig) UnmarshalJSON(data []byte) error
func (ProviderConfig) Valid ¶
func (p ProviderConfig) Valid() error
Valid determines if a ProviderConfig conforms with the OIDC specification. If Valid returns successfully it guarantees required field are non-nil and URLs are well formed.
Valid is called by UnmarshalJSON.
NOTE(ericchiang): For development purposes Valid does not mandate 'https' for URLs fields where the OIDC spec requires it. This may change in future releases of this package. See: https://github.com/coreos/go-oidc/issues/34
type ProviderConfigGetter ¶
type ProviderConfigGetter interface {
Get() (ProviderConfig, error)
}
type ProviderConfigSetter ¶
type ProviderConfigSetter interface {
Set(ProviderConfig) error
}
type ProviderConfigSyncer ¶
type ProviderConfigSyncer struct {
// contains filtered or unexported fields
}
func NewProviderConfigSyncer ¶
func NewProviderConfigSyncer(from ProviderConfigGetter, to ProviderConfigSetter) *ProviderConfigSyncer
func (*ProviderConfigSyncer) Run ¶
func (s *ProviderConfigSyncer) Run() chan struct{}
func (*ProviderConfigSyncer) WaitUntilInitialSync ¶
func (s *ProviderConfigSyncer) WaitUntilInitialSync()
type RequestTokenExtractor ¶
RequestTokenExtractor funcs extract a raw encoded token from a request.
func CookieTokenExtractor ¶
func CookieTokenExtractor(cookieName string) RequestTokenExtractor
CookieTokenExtractor returns a RequestTokenExtractor which extracts a token from the named cookie in a request.