@@ -16,34 +16,37 @@ type CoreValidator struct {
1616func (c * CoreValidator ) IntrospectToken (ctx context.Context , token string , tokenType fosite.TokenType , accessRequest fosite.AccessRequester , scopes []string ) (err error ) {
1717 switch tokenType {
1818 case fosite .RefreshToken :
19- if err = c .introspectRefreshToken (ctx , token , accessRequest ); err == nil {
20- return err
21- } else if err = c .introspectAuthorizeCode (ctx , token , accessRequest ); err == nil {
22- return err
19+ if err = c .introspectRefreshToken (ctx , token , accessRequest , scopes ); err == nil {
20+ return nil
2321 } else if err = c .introspectAccessToken (ctx , token , accessRequest , scopes ); err == nil {
24- return err
25- }
26- return err
27- case fosite .AuthorizeCode :
28- if err = c .introspectAuthorizeCode (ctx , token , accessRequest ); err == nil {
29- return err
30- } else if err := c .introspectAccessToken (ctx , token , accessRequest , scopes ); err == nil {
31- return err
32- } else if err := c .introspectRefreshToken (ctx , token , accessRequest ); err == nil {
33- return err
22+ return nil
3423 }
3524 return err
3625 }
26+
3727 if err = c .introspectAccessToken (ctx , token , accessRequest , scopes ); err == nil {
38- return err
39- } else if err := c .introspectRefreshToken (ctx , token , accessRequest ); err == nil {
40- return err
41- } else if err := c .introspectAuthorizeCode (ctx , token , accessRequest ); err == nil {
42- return err
28+ return nil
29+ } else if err := c .introspectRefreshToken (ctx , token , accessRequest , scopes ); err == nil {
30+ return nil
4331 }
32+
4433 return err
4534}
4635
36+ func matchScopes (ss fosite.ScopeStrategy , granted , scopes []string ) error {
37+ for _ , scope := range scopes {
38+ if scope == "" {
39+ continue
40+ }
41+
42+ if ! ss (granted , scope ) {
43+ return errors .Wrapf (fosite .ErrInvalidScope , "Scope %s was not granted" , scope )
44+ }
45+ }
46+
47+ return nil
48+ }
49+
4750func (c * CoreValidator ) introspectAccessToken (ctx context.Context , token string , accessRequest fosite.AccessRequester , scopes []string ) error {
4851 sig := c .CoreStrategy .AccessTokenSignature (token )
4952 or , err := c .CoreStorage .GetAccessTokenSession (ctx , sig , accessRequest .GetSession ())
@@ -53,42 +56,28 @@ func (c *CoreValidator) introspectAccessToken(ctx context.Context, token string,
5356 return err
5457 }
5558
56- for _ , scope := range scopes {
57- if scope == "" {
58- continue
59- }
60-
61- if ! c .ScopeStrategy (or .GetGrantedScopes (), scope ) {
62- return errors .WithStack (fosite .ErrInvalidScope )
63- }
59+ if err := matchScopes (c .ScopeStrategy , or .GetGrantedScopes (), scopes ); err != nil {
60+ return err
6461 }
6562
6663 accessRequest .Merge (or )
6764 return nil
6865}
6966
70- func (c * CoreValidator ) introspectRefreshToken (ctx context.Context , token string , accessRequest fosite.AccessRequester ) error {
67+ func (c * CoreValidator ) introspectRefreshToken (ctx context.Context , token string , accessRequest fosite.AccessRequester , scopes [] string ) error {
7168 sig := c .CoreStrategy .RefreshTokenSignature (token )
72- if or , err := c .CoreStorage .GetRefreshTokenSession (ctx , sig , accessRequest .GetSession ()); err != nil {
69+ or , err := c .CoreStorage .GetRefreshTokenSession (ctx , sig , accessRequest .GetSession ())
70+
71+ if err != nil {
7372 return errors .Wrap (fosite .ErrRequestUnauthorized , err .Error ())
7473 } else if err := c .CoreStrategy .ValidateRefreshToken (ctx , or , token ); err != nil {
7574 return err
76- } else {
77- accessRequest .Merge (or )
7875 }
7976
80- return nil
81- }
82-
83- func (c * CoreValidator ) introspectAuthorizeCode (ctx context.Context , token string , accessRequest fosite.AccessRequester ) error {
84- sig := c .CoreStrategy .AuthorizeCodeSignature (token )
85- if or , err := c .CoreStorage .GetAuthorizeCodeSession (ctx , sig , accessRequest .GetSession ()); err != nil {
86- return errors .Wrap (err , fosite .ErrRequestUnauthorized .Error ())
87- } else if err := c .CoreStrategy .ValidateAuthorizeCode (ctx , or , token ); err != nil {
77+ if err := matchScopes (c .ScopeStrategy , or .GetGrantedScopes (), scopes ); err != nil {
8878 return err
89- } else {
90- accessRequest .Merge (or )
9179 }
9280
81+ accessRequest .Merge (or )
9382 return nil
9483}
0 commit comments