func()

in server/server.go [166:199]


func (s *SecureSessionService) verifyToken(ctx context.Context) error {
	// If no audience, it's a unit test and don't verify the token.
	// Note that a real server implementation should remove this check.
	// Otherwise, if a server was started up without an expected audience,
	// an attacker could pass token authentication by not passing a token.
	if s.audience == "" {
		return nil
	}
	md, present := metadata.FromIncomingContext(ctx)
	if !present {
		return fmt.Errorf("expected to see metadata")
	}
	tokenValues := md.Get(TokenMetadataKey)
	if len(tokenValues) != 1 {
		return fmt.Errorf("Expected to see one value for the authorization token: %v in metadata %v", tokenValues, md)
	}

	authTokenWithPrefix := tokenValues[0]
	if len(authTokenWithPrefix) < len(TokenPrefix) {
		return fmt.Errorf("Auth token %s is too short", tokenValues[0])
	}
	authToken := tokenValues[0][len(TokenPrefix):]

	if s.testTokenValidator != nil {
		if _, err := s.testTokenValidator.Validate(ctx, authToken, s.audience); err != nil {
			return fmt.Errorf("error validating auth token: %w", err)
		}
	} else {
		if _, err := idtoken.Validate(ctx, authToken, s.audience); err != nil {
			return fmt.Errorf("error validating auth token: %w", err)
		}
	}
	return nil
}