@@ -6,6 +6,7 @@ import (
66 "fmt"
77 "net/http/httptest"
88 "net/url"
9+ "strings"
910
1011 "github.com/coreos/go-oidc/v3/oidc"
1112
@@ -18,28 +19,40 @@ import (
1819)
1920
2021const (
22+ idTokenHeader = "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJjV1IteTRzRVU1MjZVelk1SFd6UEZJbWdMMWRKUllfQ0gyY1FFRXh4UGN3In0"
23+ idTokenSignature = "Rh0zQGhWAm-2hn5JTWB3Lzuk9Ahpzs7As7ks-1VInl4"
2124 accessTokenHeader = "ewogICJhbGciOiAiUlMyNTYiLAogICJ0eXAiOiAiSldUIgp9"
2225 accessTokenSignature = "dyt0CoTl4WoVjAHI9Q_CwSKhl6d_9rhM3NrXuJttkao"
2326 defaultAudienceClaim = "aud"
2427 mockClientID = "cd6d4fae-f6a6-4a34-8454-2c6b598e9532"
2528)
2629
27−var accessTokenPayload = base64.StdEncoding.EncodeToString([]byte(
28− fmt.Sprintf(`{"%s": "%s", "realm_access": {"roles": ["write"]}, "resource_access": {"default": {"roles": ["read"]}}}`, defaultAudienceClaim, mockClientID)))
30+var (
31+ accessTokenPayload = base64.RawURLEncoding.EncodeToString([]byte(
32+ fmt.Sprintf(`{"%s": "%s", "realm_access": {"roles": ["write"]}, "resource_access": {"default": {"roles": ["read"]}}}`, defaultAudienceClaim, mockClientID)))
33+
34+ idTokenPayload = base64.RawURLEncoding.EncodeToString([]byte(
35+ fmt.Sprintf(`{"%s": "%s"}`, defaultAudienceClaim, mockClientID)))
36+)
2937
3038type DummyKeySet struct{}
3139
32−func (DummyKeySet) VerifySignature(_ context.Context, _ string) (payload []byte, err error) {
33− p, _ := base64.RawURLEncoding.DecodeString(accessTokenPayload)
40+func (DummyKeySet) VerifySignature(_ context.Context, jwt string) (payload []byte, err error) {
41+ parts := strings.Split(jwt, ".")
42+ p, _ := base64.RawURLEncoding.DecodeString(parts[1])
3443 return p, nil
3544}
3645
37−func getAccessToken() string {
46+func makeIDToken() string {
47+ return fmt.Sprintf("%s.%s.%s", idTokenHeader, idTokenPayload, idTokenSignature)
48+}
49+
50+func makeAccessToken() string {
3851 return fmt.Sprintf("%s.%s.%s", accessTokenHeader, accessTokenPayload, accessTokenSignature)
3952}
4053
4154func newTestKeycloakOIDCSetup() (*httptest.Server, *KeycloakOIDCProvider) {
42− redeemURL, server := newOIDCServer([]byte(fmt.Sprintf(`{"email": "new@thing.com", "expires_in": 300, "access_token": "%v"}`, getAccessToken())))
55+ redeemURL, server := newOIDCServer([]byte(fmt.Sprintf(`{"email": "new@thing.com", "expires_in": 300, "id_token": "%v", "access_token": "%v"}`, makeIDToken(), makeAccessToken())))
4356 provider := newKeycloakOIDCProvider(redeemURL, options.Provider{})
4457 return server, provider
4558}
@@ -134,16 +147,16 @@ var _ = Describe("Keycloak OIDC Provider Tests", func() {
134147 User: "already",
135148 Email: "a@b.com",
136149 Groups: nil,
137− IDToken: idToken,
138− AccessToken: getAccessToken(),
150+ IDToken: makeIDToken(),
151+ AccessToken: makeAccessToken(),
139152 RefreshToken: refreshToken,
140153 }
141154 expectedSession := &sessions.SessionState{
142155 User: "already",
143156 Email: "a@b.com",
144157 Groups: []string{"role:write", "role:default:read"},
145− IDToken: idToken,
146− AccessToken: getAccessToken(),
158+ IDToken: makeIDToken(),
159+ AccessToken: makeAccessToken(),
147160 RefreshToken: refreshToken,
148161 }
149162
@@ -164,16 +177,16 @@ var _ = Describe("Keycloak OIDC Provider Tests", func() {
164177 User: "already",
165178 Email: "a@b.com",
166179 Groups: []string{"existing", "group"},
167− IDToken: idToken,
168− AccessToken: getAccessToken(),
180+ IDToken: makeIDToken(),
181+ AccessToken: makeAccessToken(),
169182 RefreshToken: refreshToken,
170183 }
171184 expectedSession := &sessions.SessionState{
172185 User: "already",
173186 Email: "a@b.com",
174187 Groups: []string{"existing", "group", "role:write", "role:default:read"},
175− IDToken: idToken,
176− AccessToken: getAccessToken(),
188+ IDToken: makeIDToken(),
189+ AccessToken: makeAccessToken(),
177190 RefreshToken: refreshToken,
178191 }
179192
@@ -196,8 +209,8 @@ var _ = Describe("Keycloak OIDC Provider Tests", func() {
196209 User: "already",
197210 Email: "a@b.com",
198211 Groups: nil,
199− IDToken: idToken,
200− AccessToken: getAccessToken(),
212+ IDToken: makeIDToken(),
213+ AccessToken: makeAccessToken(),
201214 RefreshToken: refreshToken,
202215 }
203216
@@ -219,7 +232,7 @@ var _ = Describe("Keycloak OIDC Provider Tests", func() {
219232
220233 provider.ProfileURL = url
221234
222− session, err := provider.CreateSessionFromToken(context.Background(), getAccessToken())
235+ session, err := provider.CreateSessionFromToken(context.Background(), makeAccessToken())
223236 Expect(err).To(BeNil())
224237 Expect(session.ExpiresOn).ToNot(BeNil())
225238 Expect(session.CreatedAt).ToNot(BeNil())