Skip to content

Commit 6fc25c6

Browse files
committed
fix(auth): add API key scope checks to enhance authorization security
1 parent 869b040 commit 6fc25c6

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

internal/base/middleware/auth.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ func (am *AuthUserMiddleware) MustAuthWithoutAccountAvailable() gin.HandlerFunc
116116
ctx.Abort()
117117
return
118118
}
119+
// Check API key scope
120+
if am.AuthAPIKeyScope(ctx, token) {
121+
return
122+
}
119123
userInfo, err := am.authService.GetUserCacheInfo(ctx, token)
120124
if err != nil || userInfo == nil {
121125
handler.HandleResponse(ctx, errors.Unauthorized(reason.UnauthorizedError), nil)
@@ -141,6 +145,10 @@ func (am *AuthUserMiddleware) MustAuthAndAccountAvailable() gin.HandlerFunc {
141145
ctx.Abort()
142146
return
143147
}
148+
// Check API key scope
149+
if am.AuthAPIKeyScope(ctx, token) {
150+
return
151+
}
144152
userInfo, err := am.authService.GetUserCacheInfo(ctx, token)
145153
if err != nil || userInfo == nil {
146154
handler.HandleResponse(ctx, errors.Unauthorized(reason.UnauthorizedError), nil)
@@ -226,6 +234,26 @@ func (am *AuthUserMiddleware) CheckPrivateMode() gin.HandlerFunc {
226234
ctx.Next()
227235
}
228236
}
237+
238+
func (am *AuthUserMiddleware) AuthAPIKeyScope(ctx *gin.Context, accessToken string) (apiHaveNoScope bool) {
239+
if !strings.HasPrefix(accessToken, "sk_") {
240+
return false
241+
}
242+
var err error
243+
pass, err := am.authService.AuthAPIKey(ctx, ctx.Request.Method == "GET", accessToken)
244+
if err != nil {
245+
handler.HandleResponse(ctx, errors.Forbidden(reason.ForbiddenError), nil)
246+
ctx.Abort()
247+
return true
248+
}
249+
if !pass {
250+
handler.HandleResponse(ctx, errors.Forbidden(reason.ForbiddenError), nil)
251+
ctx.Abort()
252+
return true
253+
}
254+
return false
255+
}
256+
229257
func ShowIndexPage(ctx *gin.Context) {
230258
ctx.Header("content-type", "text/html;charset=utf-8")
231259
ctx.Header("X-Frame-Options", "DENY")

0 commit comments

Comments
 (0)