mirror of
https://github.com/steveiliop56/tinyauth.git
synced 2026-04-01 11:28:05 +00:00
fix: handle oauth provider id mismatch correctly
This commit is contained in:
@@ -206,11 +206,17 @@ func (controller *OAuthController) oauthCallbackHandler(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if service.ID() != req.Provider {
|
||||||
|
tlog.App.Error().Msgf("OAuth service ID mismatch: expected %s, got %s", service.ID(), req.Provider)
|
||||||
|
c.Redirect(http.StatusTemporaryRedirect, fmt.Sprintf("%s/error", controller.config.AppURL))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
sessionCookie := repository.Session{
|
sessionCookie := repository.Session{
|
||||||
Username: username,
|
Username: username,
|
||||||
Name: name,
|
Name: name,
|
||||||
Email: user.Email,
|
Email: user.Email,
|
||||||
Provider: req.Provider,
|
Provider: service.ID(),
|
||||||
OAuthGroups: utils.CoalesceToString(user.Groups),
|
OAuthGroups: utils.CoalesceToString(user.Groups),
|
||||||
OAuthName: service.Name(),
|
OAuthName: service.Name(),
|
||||||
OAuthSub: user.Sub,
|
OAuthSub: user.Sub,
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
|
|
||||||
type OAuthServiceImpl interface {
|
type OAuthServiceImpl interface {
|
||||||
Name() string
|
Name() string
|
||||||
|
ID() string
|
||||||
NewRandom() string
|
NewRandom() string
|
||||||
GetAuthURL(state string, verifier string) string
|
GetAuthURL(state string, verifier string) string
|
||||||
GetToken(code string, verifier string) (*oauth2.Token, error)
|
GetToken(code string, verifier string) (*oauth2.Token, error)
|
||||||
@@ -39,7 +40,7 @@ func (broker *OAuthBrokerService) Init() error {
|
|||||||
broker.services[name] = presetFunc(cfg)
|
broker.services[name] = presetFunc(cfg)
|
||||||
tlog.App.Debug().Str("service", name).Msg("Loaded OAuth service from preset")
|
tlog.App.Debug().Str("service", name).Msg("Loaded OAuth service from preset")
|
||||||
} else {
|
} else {
|
||||||
broker.services[name] = NewOAuthService(cfg)
|
broker.services[name] = NewOAuthService(cfg, name)
|
||||||
tlog.App.Debug().Str("service", name).Msg("Loaded OAuth service from config")
|
tlog.App.Debug().Str("service", name).Msg("Loaded OAuth service from config")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ func newGoogleOAuthService(config config.OAuthServiceConfig) *OAuthService {
|
|||||||
config.AuthURL = endpoints.Google.AuthURL
|
config.AuthURL = endpoints.Google.AuthURL
|
||||||
config.TokenURL = endpoints.Google.TokenURL
|
config.TokenURL = endpoints.Google.TokenURL
|
||||||
config.UserinfoURL = "https://openidconnect.googleapis.com/v1/userinfo"
|
config.UserinfoURL = "https://openidconnect.googleapis.com/v1/userinfo"
|
||||||
return NewOAuthService(config)
|
return NewOAuthService(config, "google")
|
||||||
}
|
}
|
||||||
|
|
||||||
func newGitHubOAuthService(config config.OAuthServiceConfig) *OAuthService {
|
func newGitHubOAuthService(config config.OAuthServiceConfig) *OAuthService {
|
||||||
@@ -19,5 +19,5 @@ func newGitHubOAuthService(config config.OAuthServiceConfig) *OAuthService {
|
|||||||
config.Scopes = scopes
|
config.Scopes = scopes
|
||||||
config.AuthURL = endpoints.GitHub.AuthURL
|
config.AuthURL = endpoints.GitHub.AuthURL
|
||||||
config.TokenURL = endpoints.GitHub.TokenURL
|
config.TokenURL = endpoints.GitHub.TokenURL
|
||||||
return NewOAuthService(config).WithUserinfoExtractor(githubExtractor)
|
return NewOAuthService(config, "github").WithUserinfoExtractor(githubExtractor)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,9 +17,10 @@ type OAuthService struct {
|
|||||||
config *oauth2.Config
|
config *oauth2.Config
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
userinfoExtractor UserinfoExtractor
|
userinfoExtractor UserinfoExtractor
|
||||||
|
id string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewOAuthService(config config.OAuthServiceConfig) *OAuthService {
|
func NewOAuthService(config config.OAuthServiceConfig, id string) *OAuthService {
|
||||||
httpClient := &http.Client{
|
httpClient := &http.Client{
|
||||||
Timeout: 30 * time.Second,
|
Timeout: 30 * time.Second,
|
||||||
Transport: &http.Transport{
|
Transport: &http.Transport{
|
||||||
@@ -45,6 +46,7 @@ func NewOAuthService(config config.OAuthServiceConfig) *OAuthService {
|
|||||||
},
|
},
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
userinfoExtractor: defaultExtractor,
|
userinfoExtractor: defaultExtractor,
|
||||||
|
id: id,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,6 +59,10 @@ func (s *OAuthService) Name() string {
|
|||||||
return s.serviceCfg.Name
|
return s.serviceCfg.Name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *OAuthService) ID() string {
|
||||||
|
return s.id
|
||||||
|
}
|
||||||
|
|
||||||
func (s *OAuthService) NewRandom() string {
|
func (s *OAuthService) NewRandom() string {
|
||||||
// The generate verifier function just creates a random string,
|
// The generate verifier function just creates a random string,
|
||||||
// so we can use it to generate a random state as well
|
// so we can use it to generate a random state as well
|
||||||
|
|||||||
Reference in New Issue
Block a user