| 57 | ) |
| 58 | |
| 59 | func TestParse(t *testing.T) { |
| 60 | mustKeys := func(s string) interface{} { |
| 61 | keys := new(jose.JSONWebKeySet) |
| 62 | if err := json.Unmarshal([]byte(s), keys); err != nil { |
| 63 | t.Fatal(err) |
| 64 | } |
| 65 | return keys |
| 66 | } |
| 67 | mustJoseClaims := func(tok string) jose.Claims { |
| 68 | jwt, err := jose.ParseSigned(tok) |
| 69 | if err != nil { |
| 70 | t.Fatal(err) |
| 71 | } |
| 72 | var c jose.Claims |
| 73 | if err := jwt.UnsafeClaimsWithoutVerification(&c); err != nil { |
| 74 | t.Fatal(err) |
| 75 | } |
| 76 | return c |
| 77 | } |
| 78 | |
| 79 | type args struct { |
| 80 | token string |
| 81 | key interface{} |
| 82 | } |
| 83 | tests := []struct { |
| 84 | name string |
| 85 | args args |
| 86 | want Payload |
| 87 | wantErr bool |
| 88 | }{ |
| 89 | {"ok JWK", args{jwkToken, mustKeys(jwkJWKSet)}, Payload{ |
| 90 | Claims: mustJoseClaims(jwkToken), |
| 91 | SHA: "2dd4f7d653c5a4f18248a903c6e3d67b1704923419c9f744fd680fc65242f3b2", |
| 92 | SANs: []string{"foo.bar.zar"}, |
| 93 | }, false}, |
| 94 | {"ok OIDC", args{oidcToken, mustKeys(gcpJWKSet)}, Payload{ |
| 95 | Claims: mustJoseClaims(oidcToken), |
| 96 | AuthorizedParty: "1087160488420-8qt7bavg3qesdhs6it824mhnfgcfe8il.apps.googleusercontent.com", |
| 97 | AtHash: "YU2TASx-n660jQfNoHvHyg", |
| 98 | Email: "mariano@smallstep.com", |
| 99 | EmailVerified: true, |
| 100 | Hd: "smallstep.com", |
| 101 | Nonce: "8eda056b32220adcb6a27163571df253a7639f34ad64441b2429a3de2c5d7eaf", |
| 102 | }, false}, |
| 103 | {"ok GCP", args{gcpToken, mustKeys(gcpJWKSet)}, Payload{ |
| 104 | Claims: mustJoseClaims(gcpToken), |
| 105 | AuthorizedParty: "106652250211606546223", |
| 106 | Email: "847250625900-compute@developer.gserviceaccount.com", |
| 107 | EmailVerified: true, |
| 108 | Google: &GCPGooglePayload{ |
| 109 | ComputeEngine: GCPComputeEnginePayload{ |
| 110 | InstanceID: "3015378661047007286", |
| 111 | InstanceName: "kops-admin", |
| 112 | InstanceCreationTimestamp: jose.NewNumericDate(time.Unix(1555441346, 0)), |
| 113 | ProjectID: "kops-dev-2019-01", |
| 114 | ProjectNumber: 847250625900, |
| 115 | Zone: "us-central1-c", |
| 116 | }, |