From a98a880e7de4c65484b61deed676fe4bf2a0d506 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Wed, 12 Apr 2023 17:25:25 +0200 Subject: [PATCH] move code, delete duplicate lines MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jörn Friedrich Dreyer --- ocis-pkg/oidc/client.go | 67 +++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 36 deletions(-) diff --git a/ocis-pkg/oidc/client.go b/ocis-pkg/oidc/client.go index 57bc43a07..13817b684 100644 --- a/ocis-pkg/oidc/client.go +++ b/ocis-pkg/oidc/client.go @@ -286,6 +286,37 @@ func (c *oidcClient) VerifyAccessToken(ctx context.Context, token string) (jwt.R } } +// verifyAccessTokenJWT tries to parse and verify the access token as a JWT. +func (c *oidcClient) verifyAccessTokenJWT(token string) (jwt.RegisteredClaims, []string, error) { + var claims jwt.RegisteredClaims + var mapClaims []string + jwks := c.getKeyfunc() + if jwks == nil { + return claims, mapClaims, errors.New("error initializing jwks keyfunc") + } + + _, err := jwt.ParseWithClaims(token, &claims, jwks.Keyfunc) + if err != nil { + return claims, mapClaims, err + } + _, mapClaims, err = new(jwt.Parser).ParseUnverified(token, jwt.MapClaims{}) + // TODO: decode mapClaims to sth readable + c.Logger.Debug().Interface("access token", &claims).Msg("parsed access token") + if err != nil { + c.Logger.Info().Err(err).Msg("Failed to parse/verify the access token.") + return claims, mapClaims, err + } + + if !claims.VerifyIssuer(c.issuer, true) { + vErr := jwt.ValidationError{} + vErr.Inner = jwt.ErrTokenInvalidIssuer + vErr.Errors |= jwt.ValidationErrorIssuer + return claims, mapClaims, vErr + } + + return claims, mapClaims, nil +} + func (c *oidcClient) VerifyLogoutToken(ctx context.Context, rawIDToken string) (*LogoutToken, error) { jws, err := jose.ParseSigned(rawIDToken) if err != nil { @@ -368,42 +399,6 @@ func (c *oidcClient) VerifyLogoutToken(ctx context.Context, rawIDToken string) ( return &token, nil } -// verifyAccessTokenJWT tries to parse and verify the access token as a JWT. -func (c *oidcClient) verifyAccessTokenJWT(token string) (jwt.RegisteredClaims, []string, error) { - var claims jwt.RegisteredClaims - var mapClaims []string - jwks := c.getKeyfunc() - if jwks == nil { - return claims, mapClaims, errors.New("error initializing jwks keyfunc") - } - - _, err := jwt.ParseWithClaims(token, &claims, jwks.Keyfunc) - if err != nil { - return claims, mapClaims, err - } - _, mapClaims, err = new(jwt.Parser).ParseUnverified(token, jwt.MapClaims{}) - // TODO: decode mapClaims to sth readable - c.Logger.Debug().Interface("access token", &claims).Msg("parsed access token") - if err != nil { - c.Logger.Info().Err(err).Msg("Failed to parse/verify the access token.") - return claims, mapClaims, err - } - c.Logger.Debug().Interface("access token", &claims).Msg("parsed access token") - if err != nil { - c.Logger.Info().Err(err).Msg("Failed to parse/verify the access token.") - return claims, mapClaims, err - } - - if !claims.VerifyIssuer(c.issuer, true) { - vErr := jwt.ValidationError{} - vErr.Inner = jwt.ErrTokenInvalidIssuer - vErr.Errors |= jwt.ValidationErrorIssuer - return claims, mapClaims, vErr - } - - return claims, mapClaims, nil -} - func unmarshalResp(r *http.Response, body []byte, v interface{}) error { err := json.Unmarshal(body, &v) if err == nil {