mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 08:02:36 +09:00 
			
		
		
		
	OIDC: case-insensitive comparison for auth scheme Basic (#31706)
				
					
				
			@kylef pointed out on https://github.com/go-gitea/gitea/pull/31632 that
[RFC7617](https://www.rfc-editor.org/rfc/rfc7617.html#section-2)
mandates case-insensitive comparison of the scheme field `Basic`. #31632
copied a case-sensitive comparison from
https://github.com/go-gitea/gitea/pull/6293. This PR fixes both
comparisons.
The issue only affects OIDC, since the implementation for normal Gitea
endpoints is already correct:
930ca92d7c/services/auth/basic.go (L55-L58)
			
			
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							4b376a0ed9
						
					
				
				
					commit
					e1cf760d2f
				
			@@ -327,7 +327,7 @@ func getOAuthGroupsForUser(ctx go_context.Context, user *user_model.User) ([]str
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func parseBasicAuth(ctx *context.Context) (username, password string, err error) {
 | 
					func parseBasicAuth(ctx *context.Context) (username, password string, err error) {
 | 
				
			||||||
	authHeader := ctx.Req.Header.Get("Authorization")
 | 
						authHeader := ctx.Req.Header.Get("Authorization")
 | 
				
			||||||
	if authType, authData, ok := strings.Cut(authHeader, " "); ok && authType == "Basic" {
 | 
						if authType, authData, ok := strings.Cut(authHeader, " "); ok && strings.EqualFold(authType, "Basic") {
 | 
				
			||||||
		return base.BasicAuthDecode(authData)
 | 
							return base.BasicAuthDecode(authData)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return "", "", errors.New("invalid basic authentication")
 | 
						return "", "", errors.New("invalid basic authentication")
 | 
				
			||||||
@@ -661,7 +661,7 @@ func AccessTokenOAuth(ctx *context.Context) {
 | 
				
			|||||||
	// if there is no ClientID or ClientSecret in the request body, fill these fields by the Authorization header and ensure the provided field matches the Authorization header
 | 
						// if there is no ClientID or ClientSecret in the request body, fill these fields by the Authorization header and ensure the provided field matches the Authorization header
 | 
				
			||||||
	if form.ClientID == "" || form.ClientSecret == "" {
 | 
						if form.ClientID == "" || form.ClientSecret == "" {
 | 
				
			||||||
		authHeader := ctx.Req.Header.Get("Authorization")
 | 
							authHeader := ctx.Req.Header.Get("Authorization")
 | 
				
			||||||
		if authType, authData, ok := strings.Cut(authHeader, " "); ok && authType == "Basic" {
 | 
							if authType, authData, ok := strings.Cut(authHeader, " "); ok && strings.EqualFold(authType, "Basic") {
 | 
				
			||||||
			clientID, clientSecret, err := base.BasicAuthDecode(authData)
 | 
								clientID, clientSecret, err := base.BasicAuthDecode(authData)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				handleAccessTokenError(ctx, AccessTokenError{
 | 
									handleAccessTokenError(ctx, AccessTokenError{
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user