@@ -10,7 +10,7 @@ import (
1010 "fmt"
1111 "time"
1212
13- "github.com/golang-jwt/jwt/v4 "
13+ "github.com/golang-jwt/jwt/v5 "
1414 "github.com/lestrrat-go/jwx/jwk"
1515 "github.com/markbates/goth"
1616 "golang.org/x/oauth2"
@@ -48,7 +48,7 @@ func (s Session) Marshal() string {
4848}
4949
5050type IDTokenClaims struct {
51- jwt.StandardClaims
51+ jwt.RegisteredClaims
5252 AccessTokenHash string `json:"at_hash"`
5353 AuthTime int `json:"auth_time"`
5454 Email string `json:"email"`
@@ -80,27 +80,18 @@ func (s *Session) Authorize(provider goth.Provider, params goth.Params) (string,
8080 idToken , err := jwt .ParseWithClaims (idToken .(string ), & IDTokenClaims {}, func (t * jwt.Token ) (interface {}, error ) {
8181 kid := t .Header ["kid" ].(string )
8282 claims := t .Claims .(* IDTokenClaims )
83- vErr := new (jwt.ValidationError )
84- if ! claims .VerifyAudience (p .clientId , true ) {
85- vErr .Inner = fmt .Errorf ("audience is incorrect" )
86- vErr .Errors |= jwt .ValidationErrorAudience
87- }
88- if ! claims .VerifyIssuer (AppleAudOrIss , true ) {
89- vErr .Inner = fmt .Errorf ("issuer is incorrect" )
90- vErr .Errors |= jwt .ValidationErrorIssuer
91- }
92- if vErr .Errors > 0 {
93- return nil , vErr
83+ validator := jwt .NewValidator (jwt .WithAudience (p .clientId ), jwt .WithIssuer (AppleAudOrIss ))
84+ err := validator .Validate (claims )
85+ if err != nil {
86+ return nil , err
9487 }
9588
9689 // per OpenID Connect Core 1.0 §3.2.2.9, Access Token Validation
9790 hash := sha256 .Sum256 ([]byte (s .AccessToken ))
9891 halfHash := hash [0 :(len (hash ) / 2 )]
9992 encodedHalfHash := base64 .RawURLEncoding .EncodeToString (halfHash )
10093 if encodedHalfHash != claims .AccessTokenHash {
101- vErr .Inner = fmt .Errorf (`identity token invalid` )
102- vErr .Errors |= jwt .ValidationErrorClaimsInvalid
103- return nil , vErr
94+ return nil , fmt .Errorf (`identity token invalid` )
10495 }
10596
10697 // get the public key for verifying the identity token signature
0 commit comments