Documentation ¶
Index ¶
- Constants
- Variables
- func DecodeRefreshToken(encodedToken string) (token string, grantID string, err error)
- func EncodeRefreshToken(token string, grantID string) string
- func FormPost(w http.ResponseWriter, r *http.Request, redirectURI *url.URL, ...)
- func GenerateToken() string
- func HTMLRedirect(rw http.ResponseWriter, r *http.Request, redirectURI string)
- func HashToken(token string) string
- func RequireScope(scopes ...string) func(http.Handler) http.Handler
- func SessionScopes(s session.Session) []string
- func WriteResponse(w http.ResponseWriter, r *http.Request, redirectURI *url.URL, ...)
- type AccessGrant
- type AccessGrantStore
- type AccessTokenDecoder
- type AccessTokenEncoding
- type AppSession
- type AppSessionStore
- type AppSessionToken
- type AppSessionTokenStore
- type Authorization
- type AuthorizationFilter
- type AuthorizationFilterFunc
- type AuthorizationService
- func (s *AuthorizationService) Check(clientID string, userID string, scopes []string) (*Authorization, error)
- func (s *AuthorizationService) CheckAndGrant(clientID string, userID string, scopes []string) (*Authorization, error)
- func (s *AuthorizationService) Delete(a *Authorization) error
- func (s *AuthorizationService) GetByID(id string) (*Authorization, error)
- func (s *AuthorizationService) ListByUser(userID string, filters ...AuthorizationFilter) ([]*Authorization, error)
- type AuthorizationStore
- type BaseURLProvider
- type ClientLike
- type CodeGrant
- type CodeGrantStore
- type EndpointsProvider
- type EventService
- type GrantSessionKind
- type KeepThirdPartyAuthorizationFilter
- type MetadataProvider
- type OfflineGrant
- func (g *OfflineGrant) Equal(ss session.Session) bool
- func (g *OfflineGrant) GetAccessInfo() *access.Info
- func (g *OfflineGrant) GetAuthenticatedAt() time.Time
- func (g *OfflineGrant) GetAuthenticationInfo() authenticationinfo.T
- func (g *OfflineGrant) GetClientID() string
- func (g *OfflineGrant) GetCreatedAt() time.Time
- func (g *OfflineGrant) GetDeviceInfo() (map[string]interface{}, bool)
- func (g *OfflineGrant) GetOIDCAMR() ([]string, bool)
- func (g *OfflineGrant) GetUserID() string
- func (g *OfflineGrant) IsSameSSOGroup(ss session.Session) bool
- func (g *OfflineGrant) SSOGroupIDPSessionID() string
- func (g *OfflineGrant) SessionID() string
- func (g *OfflineGrant) SessionType() session.Type
- func (g *OfflineGrant) ToAPIModel() *model.Session
- type OfflineGrantService
- type OfflineGrantSessionManager
- type OfflineGrantStore
- type Resolver
- type ResolverCookieManager
- type ResolverSessionProvider
- type ServiceIDPSessionProvider
- type SessionManager
- func (m *SessionManager) ClearCookie() []*http.Cookie
- func (m *SessionManager) Delete(session session.Session) error
- func (m *SessionManager) Get(id string) (session.Session, error)
- func (m *SessionManager) List(userID string) ([]session.Session, error)
- func (m *SessionManager) TerminateAllExcept(userID string, currentSession session.Session) ([]session.Session, error)
- type URLProvider
- type UserClaimsProvider
Constants ¶
View Source
const FullAccessScope = "https://authgear.com/scopes/full-access"
View Source
const FullUserInfoScope = "https://authgear.com/scopes/full-userinfo"
Variables ¶
View Source
var ClientLikeNotFound = &ClientLike{ ClientParty: config.ClientPartyThird, }
View Source
var DependencySet = wire.NewSet( wire.Struct(new(MetadataProvider), "*"), wire.Struct(new(Resolver), "*"), wire.Struct(new(SessionManager), "*"), wire.Struct(new(URLProvider), "*"), wire.Struct(new(OfflineGrantService), "*"), wire.Struct(new(AccessTokenEncoding), "*"), wire.Bind(new(AccessTokenDecoder), new(*AccessTokenEncoding)), wire.Struct(new(AuthorizationService), "*"), wire.Bind(new(OfflineGrantSessionManager), new(*SessionManager)), )
View Source
var ErrAuthorizationNotFound = errors.New("oauth authorization not found")
View Source
var ErrAuthorizationScopesNotGranted = errors.New("oauth authorization scopes not granted")
View Source
var ErrGrantNotFound = errors.New("oauth grant not found")
Functions ¶
func DecodeRefreshToken ¶
func EncodeRefreshToken ¶
func GenerateToken ¶
func GenerateToken() string
func HTMLRedirect ¶
func HTMLRedirect(rw http.ResponseWriter, r *http.Request, redirectURI string)
func RequireScope ¶
RequireScope allow request to pass if session contains one of the required scopes. If there is no required scopes, only validity of session is checked.
func SessionScopes ¶
Types ¶
type AccessGrant ¶
type AccessGrant struct { AppID string `json:"app_id"` AuthorizationID string `json:"authz_id"` SessionID string `json:"session_id"` SessionKind GrantSessionKind `json:"session_kind"` CreatedAt time.Time `json:"created_at"` ExpireAt time.Time `json:"expire_at"` Scopes []string `json:"scopes"` TokenHash string `json:"token_hash"` }
type AccessGrantStore ¶
type AccessGrantStore interface { GetAccessGrant(tokenHash string) (*AccessGrant, error) CreateAccessGrant(*AccessGrant) error DeleteAccessGrant(*AccessGrant) error }
type AccessTokenDecoder ¶
type AccessTokenEncoding ¶
type AccessTokenEncoding struct { Secrets *config.OAuthKeyMaterials Clock clock.Clock UserClaims UserClaimsProvider BaseURL BaseURLProvider Events EventService }
func (*AccessTokenEncoding) DecodeAccessToken ¶
func (e *AccessTokenEncoding) DecodeAccessToken(encodedToken string) (tok string, isHash bool, err error)
func (*AccessTokenEncoding) EncodeAccessToken ¶
func (e *AccessTokenEncoding) EncodeAccessToken(client *config.OAuthClientConfig, grant *AccessGrant, userID string, token string) (string, error)
type AppSession ¶
type AppSessionStore ¶
type AppSessionStore interface { GetAppSession(tokenHash string) (*AppSession, error) CreateAppSession(*AppSession) error DeleteAppSession(*AppSession) error }
type AppSessionToken ¶
type AppSessionTokenStore ¶
type AppSessionTokenStore interface { GetAppSessionToken(tokenHash string) (*AppSessionToken, error) CreateAppSessionToken(*AppSessionToken) error DeleteAppSessionToken(*AppSessionToken) error }
type Authorization ¶
type Authorization struct { ID string AppID string ClientID string UserID string CreatedAt time.Time UpdatedAt time.Time Scopes []string }
func ApplyAuthorizationFilters ¶
func ApplyAuthorizationFilters(authzs []*Authorization, filters ...AuthorizationFilter) (out []*Authorization)
func (Authorization) IsAuthorized ¶
func (z Authorization) IsAuthorized(scopes []string) bool
func (Authorization) ToAPIModel ¶
func (z Authorization) ToAPIModel() *model.Authorization
func (Authorization) WithScopesAdded ¶
func (z Authorization) WithScopesAdded(scopes []string) *Authorization
type AuthorizationFilter ¶
type AuthorizationFilter interface {
Keep(authz *Authorization) bool
}
type AuthorizationFilterFunc ¶
type AuthorizationFilterFunc func(a *Authorization) bool
func (AuthorizationFilterFunc) Keep ¶
func (f AuthorizationFilterFunc) Keep(a *Authorization) bool
type AuthorizationService ¶
type AuthorizationService struct { AppID config.AppID Store AuthorizationStore Clock clock.Clock OAuthSessionManager OfflineGrantSessionManager }
func (*AuthorizationService) Check ¶
func (s *AuthorizationService) Check( clientID string, userID string, scopes []string, ) (*Authorization, error)
func (*AuthorizationService) CheckAndGrant ¶
func (s *AuthorizationService) CheckAndGrant( clientID string, userID string, scopes []string, ) (*Authorization, error)
func (*AuthorizationService) Delete ¶
func (s *AuthorizationService) Delete(a *Authorization) error
func (*AuthorizationService) GetByID ¶
func (s *AuthorizationService) GetByID(id string) (*Authorization, error)
func (*AuthorizationService) ListByUser ¶
func (s *AuthorizationService) ListByUser(userID string, filters ...AuthorizationFilter) ([]*Authorization, error)
type AuthorizationStore ¶
type AuthorizationStore interface { Get(userID, clientID string) (*Authorization, error) GetByID(id string) (*Authorization, error) ListByUserID(userID string) ([]*Authorization, error) Create(*Authorization) error Delete(*Authorization) error ResetAll(userID string) error UpdateScopes(*Authorization) error }
type BaseURLProvider ¶
type ClientLike ¶
type ClientLike struct { ClientParty config.ClientParty Scopes []string }
func SessionClientLike ¶
func SessionClientLike(s session.Session, c *config.OAuthConfig) *ClientLike
type CodeGrant ¶
type CodeGrant struct { AppID string `json:"app_id"` AuthorizationID string `json:"authz_id"` IDPSessionID string `json:"session_id"` AuthenticationInfo authenticationinfo.T `json:"authentication_info"` IDTokenHintSID string `json:"id_token_hint_sid"` CreatedAt time.Time `json:"created_at"` ExpireAt time.Time `json:"expire_at"` Scopes []string `json:"scopes"` CodeHash string `json:"code_hash"` RedirectURI string `json:"redirect_uri"` OIDCNonce string `json:"nonce,omitempty"` PKCEChallenge string `json:"challenge,omitempty"` SSOEnabled bool `json:"sso_enabled,omitempty"` }
type CodeGrantStore ¶
type EndpointsProvider ¶
type EventService ¶
type GrantSessionKind ¶
type GrantSessionKind string
const ( GrantSessionKindOffline GrantSessionKind = "offline_grant" GrantSessionKindSession GrantSessionKind = "idp_session" )
type KeepThirdPartyAuthorizationFilter ¶
func NewKeepThirdPartyAuthorizationFilter ¶
func NewKeepThirdPartyAuthorizationFilter(oauthConfig *config.OAuthConfig) *KeepThirdPartyAuthorizationFilter
func (*KeepThirdPartyAuthorizationFilter) Keep ¶
func (f *KeepThirdPartyAuthorizationFilter) Keep(authz *Authorization) bool
type MetadataProvider ¶
type MetadataProvider struct {
Endpoints EndpointsProvider
}
func (*MetadataProvider) PopulateMetadata ¶
func (p *MetadataProvider) PopulateMetadata(meta map[string]interface{})
type OfflineGrant ¶
type OfflineGrant struct { AppID string `json:"app_id"` ID string `json:"id"` ClientID string `json:"client_id"` AuthorizationID string `json:"authz_id"` // IDPSessionID refers to the IDP session. IDPSessionID string `json:"idp_session_id,omitempty"` // IdentityID refers to the identity. // It is only set for biometric authentication. IdentityID string `json:"identity_id,omitempty"` CreatedAt time.Time `json:"created_at"` AuthenticatedAt time.Time `json:"authenticated_at"` Scopes []string `json:"scopes"` TokenHash string `json:"token_hash"` Attrs session.Attrs `json:"attrs"` AccessInfo access.Info `json:"access_info"` DeviceInfo map[string]interface{} `json:"device_info,omitempty"` SSOEnabled bool `json:"sso_enabled,omitempty"` }
func (*OfflineGrant) GetAccessInfo ¶
func (g *OfflineGrant) GetAccessInfo() *access.Info
func (*OfflineGrant) GetAuthenticatedAt ¶
func (g *OfflineGrant) GetAuthenticatedAt() time.Time
func (*OfflineGrant) GetAuthenticationInfo ¶
func (g *OfflineGrant) GetAuthenticationInfo() authenticationinfo.T
func (*OfflineGrant) GetClientID ¶
func (g *OfflineGrant) GetClientID() string
func (*OfflineGrant) GetCreatedAt ¶
func (g *OfflineGrant) GetCreatedAt() time.Time
func (*OfflineGrant) GetDeviceInfo ¶
func (g *OfflineGrant) GetDeviceInfo() (map[string]interface{}, bool)
func (*OfflineGrant) GetOIDCAMR ¶
func (g *OfflineGrant) GetOIDCAMR() ([]string, bool)
func (*OfflineGrant) GetUserID ¶
func (g *OfflineGrant) GetUserID() string
func (*OfflineGrant) IsSameSSOGroup ¶
func (g *OfflineGrant) IsSameSSOGroup(ss session.Session) bool
IsSameSSOGroup returns true when the session argument - is the same offline grant - is idp session in the same sso group (current offline grant needs to be sso enabled) - is offline grant in the same sso group (current offline grant needs to be sso enabled)
func (*OfflineGrant) SSOGroupIDPSessionID ¶
func (g *OfflineGrant) SSOGroupIDPSessionID() string
func (*OfflineGrant) SessionID ¶
func (g *OfflineGrant) SessionID() string
func (*OfflineGrant) SessionType ¶
func (g *OfflineGrant) SessionType() session.Type
func (*OfflineGrant) ToAPIModel ¶
func (g *OfflineGrant) ToAPIModel() *model.Session
type OfflineGrantService ¶
type OfflineGrantService struct { OAuthConfig *config.OAuthConfig Clock clock.Clock IDPSessions ServiceIDPSessionProvider }
func (*OfflineGrantService) CheckSessionExpired ¶
func (s *OfflineGrantService) CheckSessionExpired(session *OfflineGrant) (bool, time.Time, error)
func (*OfflineGrantService) ComputeOfflineGrantExpiry ¶
func (s *OfflineGrantService) ComputeOfflineGrantExpiry(session *OfflineGrant) (expiry time.Time, err error)
func (*OfflineGrantService) IsValid ¶
func (s *OfflineGrantService) IsValid(session *OfflineGrant) (bool, time.Time, error)
type OfflineGrantStore ¶
type OfflineGrantStore interface { GetOfflineGrant(id string) (*OfflineGrant, error) CreateOfflineGrant(offlineGrant *OfflineGrant, expireAt time.Time) error DeleteOfflineGrant(*OfflineGrant) error AccessWithID(id string, accessEvent access.Event, expireAt time.Time) (*OfflineGrant, error) UpdateOfflineGrantDeviceInfo(id string, deviceInfo map[string]interface{}, expireAt time.Time) (*OfflineGrant, error) UpdateOfflineGrantAuthenticatedAt(id string, authenticatedAt time.Time, expireAt time.Time) (*OfflineGrant, error) ListOfflineGrants(userID string) ([]*OfflineGrant, error) ListClientOfflineGrants(clientID string, userID string) ([]*OfflineGrant, error) }
type Resolver ¶
type Resolver struct { RemoteIP httputil.RemoteIP UserAgentString httputil.UserAgentString OAuthConfig *config.OAuthConfig Authorizations AuthorizationStore AccessGrants AccessGrantStore OfflineGrants OfflineGrantStore AppSessions AppSessionStore AccessTokenDecoder AccessTokenDecoder Sessions ResolverSessionProvider Cookies ResolverCookieManager Clock clock.Clock OfflineGrantService OfflineGrantService }
type ResolverCookieManager ¶
type ResolverSessionProvider ¶
type ResolverSessionProvider interface {
AccessWithID(id string, accessEvent access.Event) (*idpsession.IDPSession, error)
}
type ServiceIDPSessionProvider ¶
type ServiceIDPSessionProvider interface { Get(id string) (*idpsession.IDPSession, error) CheckSessionExpired(session *idpsession.IDPSession) (expired bool) }
type SessionManager ¶
type SessionManager struct { Store OfflineGrantStore Config *config.OAuthConfig Service OfflineGrantService }
func (*SessionManager) ClearCookie ¶
func (m *SessionManager) ClearCookie() []*http.Cookie
func (*SessionManager) List ¶
func (m *SessionManager) List(userID string) ([]session.Session, error)
func (*SessionManager) TerminateAllExcept ¶
type URLProvider ¶
type URLProvider struct {
Endpoints EndpointsProvider
}
func (*URLProvider) ConsentURL ¶
func (p *URLProvider) ConsentURL(r protocol.AuthorizationRequest) *url.URL
Source Files ¶
- app_session.go
- app_session_token.go
- authz.go
- authz_filters.go
- authz_service.go
- client_like.go
- deps.go
- endpoints.go
- error.go
- grant.go
- grant_access.go
- grant_code.go
- grant_offline.go
- grant_offline_service.go
- metadata.go
- resolver.go
- response_mode.go
- scope.go
- session_manager.go
- store_authz.go
- store_grant.go
- token.go
- token_encoding.go
- url_provider.go
Click to show internal directories.
Click to hide internal directories.