FEATURES (and FIXES): - support OAuth 2.0 Token Revocation [RFC 7009](https://datatracker.ietf.org/doc/html/rfc7009) - handle request object using `request` parameter [OIDC Core 1.0 Request Object](https://openid.net/specs/openid-connect-core-1_0.html#RequestObject) - handle response mode - added some information to the discovery endpoint: - revocation_endpoint (added with token revocation) - revocation_endpoint_auth_methods_supported (added with token revocation) - revocation_endpoint_auth_signing_alg_values_supported (added with token revocation) - token_endpoint_auth_signing_alg_values_supported (was missing) - introspection_endpoint_auth_signing_alg_values_supported (was missing) - request_object_signing_alg_values_supported (added with request object) - request_parameter_supported (added with request object) - fixed `removeUserinfoScopes ` now returns the scopes without "userinfo" scopes (profile, email, phone, addedd) [source diff](https://github.com/caos/oidc/pull/130/files#diff-fad50c8c0f065d4dbc49d6c6a38f09c992c8f5d651a479ba00e31b500543559eL170-R171) - improved error handling (pkg/oidc/error.go) and fixed some wrong OAuth errors (e.g. `invalid_grant` instead of `invalid_request`) - improved MarshalJSON and added MarshalJSONWithStatus - removed deprecated PEM decryption from `BytesToPrivateKey` [source diff](https://github.com/caos/oidc/pull/130/files#diff-fe246e428e399ccff599627c71764de51387b60b4df84c67de3febd0954e859bL11-L19) - NewAccessTokenVerifier now uses correct (internal) `accessTokenVerifier` [source diff](https://github.com/caos/oidc/pull/130/files#diff-3a01c7500ead8f35448456ef231c7c22f8d291710936cac91de5edeef52ffc72L52-R52) BREAKING CHANGE: - move functions from `utils` package into separate packages - added various methods to the (OP) `Configuration` interface [source diff](https://github.com/caos/oidc/pull/130/files#diff-2538e0dfc772fdc37f057aecd6fcc2943f516c24e8be794cce0e368a26d20a82R19-R32) - added revocationEndpoint to `WithCustomEndpoints ` [source diff](https://github.com/caos/oidc/pull/130/files#diff-19ae13a743eb7cebbb96492798b1bec556673eb6236b1387e38d722900bae1c3L355-R391) - remove unnecessary context parameter from JWTProfileExchange [source diff](https://github.com/caos/oidc/pull/130/files#diff-4ed8f6affa4a9631fa8a034b3d5752fbb6a819107141aae00029014e950f7b4cL14)
102 lines
4.5 KiB
Go
102 lines
4.5 KiB
Go
package oidc
|
|
|
|
const (
|
|
//ScopeOpenID defines the scope `openid`
|
|
//OpenID Connect requests MUST contain the `openid` scope value
|
|
ScopeOpenID = "openid"
|
|
|
|
//ScopeProfile defines the scope `profile`
|
|
//This (optional) scope value requests access to the End-User's default profile Claims,
|
|
//which are: name, family_name, given_name, middle_name, nickname, preferred_username,
|
|
//profile, picture, website, gender, birthdate, zoneinfo, locale, and updated_at.
|
|
ScopeProfile = "profile"
|
|
|
|
//ScopeEmail defines the scope `email`
|
|
//This (optional) scope value requests access to the email and email_verified Claims.
|
|
ScopeEmail = "email"
|
|
|
|
//ScopeAddress defines the scope `address`
|
|
//This (optional) scope value requests access to the address Claim.
|
|
ScopeAddress = "address"
|
|
|
|
//ScopePhone defines the scope `phone`
|
|
//This (optional) scope value requests access to the phone_number and phone_number_verified Claims.
|
|
ScopePhone = "phone"
|
|
|
|
//ScopeOfflineAccess defines the scope `offline_access`
|
|
//This (optional) scope value requests that an OAuth 2.0 Refresh Token be issued that can be used to obtain an Access Token
|
|
//that grants access to the End-User's UserInfo Endpoint even when the End-User is not present (not logged in).
|
|
ScopeOfflineAccess = "offline_access"
|
|
|
|
//ResponseTypeCode for the Authorization Code Flow returning a code from the Authorization Server
|
|
ResponseTypeCode ResponseType = "code"
|
|
|
|
//ResponseTypeIDToken for the Implicit Flow returning id and access tokens directly from the Authorization Server
|
|
ResponseTypeIDToken ResponseType = "id_token token"
|
|
|
|
//ResponseTypeIDTokenOnly for the Implicit Flow returning only id token directly from the Authorization Server
|
|
ResponseTypeIDTokenOnly ResponseType = "id_token"
|
|
|
|
DisplayPage Display = "page"
|
|
DisplayPopup Display = "popup"
|
|
DisplayTouch Display = "touch"
|
|
DisplayWAP Display = "wap"
|
|
|
|
ResponseModeQuery ResponseMode = "query"
|
|
ResponseModeFragment ResponseMode = "fragment"
|
|
|
|
//PromptNone (`none`) disallows the Authorization Server to display any authentication or consent user interface pages.
|
|
//An error (login_required, interaction_required, ...) will be returned if the user is not already authenticated or consent is needed
|
|
PromptNone = "none"
|
|
|
|
//PromptLogin (`login`) directs the Authorization Server to prompt the End-User for reauthentication.
|
|
PromptLogin = "login"
|
|
|
|
//PromptConsent (`consent`) directs the Authorization Server to prompt the End-User for consent (of sharing information).
|
|
PromptConsent = "consent"
|
|
|
|
//PromptSelectAccount (`select_account `) directs the Authorization Server to prompt the End-User to select a user account (to enable multi user / session switching)
|
|
PromptSelectAccount = "select_account"
|
|
)
|
|
|
|
//AuthRequest according to:
|
|
//https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest
|
|
type AuthRequest struct {
|
|
Scopes SpaceDelimitedArray `json:"scope" schema:"scope"`
|
|
ResponseType ResponseType `json:"response_type" schema:"response_type"`
|
|
ClientID string `json:"client_id" schema:"client_id"`
|
|
RedirectURI string `json:"redirect_uri" schema:"redirect_uri"`
|
|
|
|
State string `json:"state" schema:"state"`
|
|
Nonce string `json:"nonce" schema:"nonce"`
|
|
|
|
ResponseMode ResponseMode `json:"response_mode" schema:"response_mode"`
|
|
Display Display `json:"display" schema:"display"`
|
|
Prompt SpaceDelimitedArray `json:"prompt" schema:"prompt"`
|
|
MaxAge *uint `json:"max_age" schema:"max_age"`
|
|
UILocales Locales `json:"ui_locales" schema:"ui_locales"`
|
|
IDTokenHint string `json:"id_token_hint" schema:"id_token_hint"`
|
|
LoginHint string `json:"login_hint" schema:"login_hint"`
|
|
ACRValues []string `json:"acr_values" schema:"acr_values"`
|
|
|
|
CodeChallenge string `json:"code_challenge" schema:"code_challenge"`
|
|
CodeChallengeMethod CodeChallengeMethod `json:"code_challenge_method" schema:"code_challenge_method"`
|
|
|
|
//RequestParam enables OIDC requests to be passed in a single, self-contained parameter (as JWT, called Request Object)
|
|
RequestParam string `schema:"request"`
|
|
}
|
|
|
|
//GetRedirectURI returns the redirect_uri value for the ErrAuthRequest interface
|
|
func (a *AuthRequest) GetRedirectURI() string {
|
|
return a.RedirectURI
|
|
}
|
|
|
|
//GetResponseType returns the response_type value for the ErrAuthRequest interface
|
|
func (a *AuthRequest) GetResponseType() ResponseType {
|
|
return a.ResponseType
|
|
}
|
|
|
|
//GetState returns the optional state value for the ErrAuthRequest interface
|
|
func (a *AuthRequest) GetState() string {
|
|
return a.State
|
|
}
|