MCPcopy Create free account
hub / github.com/authorizerdev/authorizer / ValidateRefreshToken

Method ValidateRefreshToken

internal/token/auth_token.go:334–382  ·  view source on GitHub ↗

Function to validate refreshToken

(gc *gin.Context, refreshToken string)

Source from the content-addressed store, hash-verified

332
333// Function to validate refreshToken
334func (p *provider) ValidateRefreshToken(gc *gin.Context, refreshToken string) (map[string]interface{}, error) {
335 res := make(map[string]interface{})
336
337 if refreshToken == "" {
338 return res, fmt.Errorf(`unauthorized`)
339 }
340
341 res, err := p.ParseJWTToken(refreshToken)
342 if err != nil {
343 return res, err
344 }
345
346 userID, ok := res["sub"].(string)
347 if !ok || userID == "" {
348 return res, fmt.Errorf(`unauthorized: missing sub claim`)
349 }
350 nonce, _ := res["nonce"].(string)
351
352 loginMethod, _ := res["login_method"].(string)
353 sessionKey := userID
354 if loginMethod != "" {
355 sessionKey = loginMethod + ":" + userID
356 }
357 token, err := p.dependencies.MemoryStoreProvider.GetUserSession(sessionKey, constants.TokenTypeRefreshToken+"_"+nonce)
358 if nonce == "" || err != nil {
359 p.dependencies.Log.Debug().Err(err).Msgf("invalid refresh token: %v, key: %s", err, sessionKey+":"+constants.TokenTypeRefreshToken+"_"+nonce)
360 return res, fmt.Errorf(`unauthorized`)
361 }
362
363 if subtle.ConstantTimeCompare([]byte(token), []byte(refreshToken)) != 1 {
364 p.dependencies.Log.Debug().Msgf("invalid refresh token: %s, key: %s", err, sessionKey+":"+constants.TokenTypeRefreshToken+"_"+nonce)
365 return res, fmt.Errorf(`unauthorized`)
366 }
367
368 hostname := parsers.GetHost(gc)
369 if ok, err := p.ValidateJWTClaims(res, &AuthTokenConfig{
370 HostName: hostname,
371 Nonce: nonce,
372 User: &schemas.User{ID: userID},
373 }); !ok || err != nil {
374 return res, err
375 }
376
377 if res["token_type"] != constants.TokenTypeRefreshToken {
378 return res, fmt.Errorf(`unauthorized: invalid token type`)
379 }
380
381 return res, nil
382}
383
384func (p *provider) ValidateBrowserSession(gc *gin.Context, encryptedSession string) (*SessionData, error) {
385 if encryptedSession == "" {

Callers

nothing calls this directly

Calls 4

ParseJWTTokenMethod · 0.95
ValidateJWTClaimsMethod · 0.95
GetHostFunction · 0.92
GetUserSessionMethod · 0.65

Tested by

no test coverage detected