@@ -11,7 +11,7 @@ import (
11
11
"testing"
12
12
"time"
13
13
14
- jwt "github.com/dgrijalva/jwt-go"
14
+ "github.com/dgrijalva/jwt-go"
15
15
"github.com/lonelycode/go-uuid/uuid"
16
16
"github.com/stretchr/testify/assert"
17
17
@@ -1223,7 +1223,81 @@ func TestJWTScopeToPolicyMapping(t *testing.T) {
1223
1223
},
1224
1224
)
1225
1225
})
1226
+ }
1227
+
1228
+ func TestGetScopeFromClaim (t * testing.T ) {
1229
+ type tableTest struct {
1230
+ jwt string
1231
+ key string
1232
+ expectedClaims []string
1233
+ name string
1234
+ }
1235
+
1236
+ tests := []tableTest {
1237
+ {
1238
+ jwt : `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMiwic2NvcGUiOiJmb28gYmFyIGJheiJ9.iS5FYY99ccB1oTGtMmNjM1lppS18FSKPytrV9oQouSM` ,
1239
+ key : "scope" ,
1240
+ expectedClaims : []string {"foo" , "bar" , "baz" },
1241
+ name : "space separated" ,
1242
+ },
1243
+ {
1244
+ jwt : `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMiwic2NvcGUiOlsiZm9vIiwiYmFyIiwiYmF6Il19.Lo_7J1FpUcsKWC4E9nMiouyVdUClA3KujHu9EwqHEwo` ,
1245
+ key : "scope" ,
1246
+ expectedClaims : []string {"foo" , "bar" , "baz" },
1247
+ name : "slice strings" ,
1248
+ },
1249
+ {
1250
+ jwt : `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMiwic2NvcGUxIjp7InNjb3BlMiI6ImZvbyBiYXIgYmF6In19.IsCBEl-GozS-sgZaTHoLwuBKmxYLOCYYVCiLLVmGu8o` ,
1251
+ key : "scope1.scope2" ,
1252
+ expectedClaims : []string {"foo" , "bar" , "baz" },
1253
+ name : "nested space separated" ,
1254
+ },
1255
+ {
1256
+ jwt : `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMiwic2NvcGUxIjp7InNjb3BlMiI6WyJmb28iLCJiYXIiLCJiYXoiXX19.VDBnH2U7KWl-fajAHGq6PzzWp4mnNCkfKAodfhHc0gY` ,
1257
+ key : "scope1.scope2" ,
1258
+ expectedClaims : []string {"foo" , "bar" , "baz" },
1259
+ name : "nested slice strings" ,
1260
+ },
1261
+ }
1262
+
1263
+ pubKey := []byte (`mysecret` )
1264
+
1265
+ for i , mytest := range tests {
1266
+ t .Run (fmt .Sprintf ("%d %s" , i , mytest .name ), func (t * testing.T ) {
1267
+ tok , err := jwt .Parse (mytest .jwt , func (token * jwt.Token ) (interface {}, error ) {
1268
+ return pubKey , nil
1269
+ })
1270
+ if err != nil {
1271
+ t .Fatal (err .Error ())
1272
+ }
1273
+
1274
+ scopes := getScopeFromClaim (tok .Claims .(jwt.MapClaims ), mytest .key )
1275
+ if ! testEq (mytest .expectedClaims , scopes ) {
1276
+ t .Logf ("expected: %v" , mytest .expectedClaims )
1277
+ t .Logf ("actual: %v" , scopes )
1278
+ t .Fatal (i , "slices not equal" )
1279
+ }
1280
+ })
1281
+ }
1282
+ }
1283
+
1284
+ func testEq (a , b []string ) bool {
1285
+ // If one is nil, the other must also be nil.
1286
+ if (a == nil ) != (b == nil ) {
1287
+ return false
1288
+ }
1289
+
1290
+ if len (a ) != len (b ) {
1291
+ return false
1292
+ }
1293
+
1294
+ for i := range a {
1295
+ if a [i ] != b [i ] {
1296
+ return false
1297
+ }
1298
+ }
1226
1299
1300
+ return true
1227
1301
}
1228
1302
1229
1303
func TestJWTExistingSessionRSAWithRawSourcePolicyIDChanged (t * testing.T ) {
0 commit comments