Return access_denied error when an OAuth2 request is denied (#30974)
		
	According to [RFC 6749](https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.2.1), when the resource owner or authorization server denied an request, an `access_denied` error should be returned. But currently in this case Gitea does not return any error. For example, if the user clicks "Cancel" here, an `access_denied` error should be returned. <img width="360px" src="https://github.com/go-gitea/gitea/assets/15528715/be31c09b-4c0a-4701-b7a4-f54b8fe3a6c5" /> (cherry picked from commit f1d9f18d96050d89a4085c961f572f07b1e653d1)
This commit is contained in:
		
					parent
					
						
							
								f6e50abd65
							
						
					
				
			
			
				commit
				
					
						886a675f62
					
				
			
		
					 3 changed files with 13 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -542,6 +542,16 @@ func GrantApplicationOAuth(ctx *context.Context) {
 | 
			
		|||
		ctx.Error(http.StatusBadRequest)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !form.Granted {
 | 
			
		||||
		handleAuthorizeError(ctx, AuthorizeError{
 | 
			
		||||
			State:            form.State,
 | 
			
		||||
			ErrorDescription: "the request is denied",
 | 
			
		||||
			ErrorCode:        ErrorCodeAccessDenied,
 | 
			
		||||
		}, form.RedirectURI)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	app, err := auth.GetOAuth2ApplicationByClientID(ctx, form.ClientID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		ctx.ServerError("GetOAuth2ApplicationByClientID", err)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -162,6 +162,7 @@ func (f *AuthorizationForm) Validate(req *http.Request, errs binding.Errors) bin
 | 
			
		|||
// GrantApplicationForm form for authorizing oauth2 clients
 | 
			
		||||
type GrantApplicationForm struct {
 | 
			
		||||
	ClientID    string `binding:"Required"`
 | 
			
		||||
	Granted     bool
 | 
			
		||||
	RedirectURI string
 | 
			
		||||
	State       string
 | 
			
		||||
	Scope       string
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,8 +23,8 @@
 | 
			
		|||
					<input type="hidden" name="scope" value="{{.Scope}}">
 | 
			
		||||
					<input type="hidden" name="nonce" value="{{.Nonce}}">
 | 
			
		||||
					<input type="hidden" name="redirect_uri" value="{{.RedirectURI}}">
 | 
			
		||||
					<button type="submit" id="authorize-app" value="{{ctx.Locale.Tr "auth.authorize_application"}}" class="ui red inline button">{{ctx.Locale.Tr "auth.authorize_application"}}</button>
 | 
			
		||||
					<a href="{{.RedirectURI}}" class="ui basic primary inline button">Cancel</a>
 | 
			
		||||
					<button type="submit" id="authorize-app" name="granted" value="true" class="ui red inline button">{{ctx.Locale.Tr "auth.authorize_application"}}</button>
 | 
			
		||||
					<button type="submit" name="granted" value="false" class="ui basic primary inline button">{{ctx.Locale.Tr "cancel"}}</button>
 | 
			
		||||
				</form>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue