Skip to content
This repository was archived by the owner on Apr 22, 2024. It is now read-only.

Commit 9725ce9

Browse files
committed
Fix returned token encoding
1 parent 7e217a4 commit 9725ce9

File tree

4 files changed

+31
-23
lines changed

4 files changed

+31
-23
lines changed

internal/authz/oidc.go

+10-2
Original file line numberDiff line numberDiff line change
@@ -731,18 +731,26 @@ func (o *oidcHandler) encodeTokensToHeaders(tokens *oidc.TokenResponse) map[stri
731731
headers := make(map[string]string)
732732

733733
// Always add the ID token to the headers
734-
headers[o.config.GetIdToken().GetHeader()] = o.config.IdToken.GetPreamble() + " " + oidc.EncodeToken(tokens.IDToken)
734+
headers[o.config.GetIdToken().GetHeader()] = encodeHeaderValue(o.config.IdToken.GetPreamble(), tokens.IDToken)
735735

736736
if o.config.GetAccessToken() == nil || tokens.AccessToken == "" {
737737
return headers
738738
}
739739

740740
// If there is an access token and config enables it, add it to the headers
741-
headers[o.config.GetAccessToken().GetHeader()] = o.config.GetAccessToken().GetPreamble() + " " + oidc.EncodeToken(tokens.AccessToken)
741+
headers[o.config.GetAccessToken().GetHeader()] = encodeHeaderValue(o.config.GetAccessToken().GetPreamble(), tokens.AccessToken)
742742

743743
return headers
744744
}
745745

746+
// encodeHeaderValue encodes the value with the given preamble, if any
747+
func encodeHeaderValue(preamble string, value string) string {
748+
if preamble != "" {
749+
return preamble + " " + value
750+
}
751+
return value
752+
}
753+
746754
// areRequiredTokensExpired checks if the required tokens are expired.
747755
func (o *oidcHandler) areRequiredTokensExpired(tokens *oidc.TokenResponse) (bool, error) {
748756
idToken, err := tokens.ParseIDToken()

internal/authz/oidc_test.go

+21-11
Original file line numberDiff line numberDiff line change
@@ -1152,10 +1152,8 @@ func TestMatchesLogoutPath(t *testing.T) {
11521152

11531153
func TestEncodeTokensToHeaders(t *testing.T) {
11541154
const (
1155-
idToken = "id-token"
1156-
accessToken = "access-token"
1157-
idTokenB64 = "aWQtdG9rZW4="
1158-
accessTokenB64 = "YWNjZXNzLXRva2Vu"
1155+
idToken = "id-token"
1156+
accessToken = "access-token"
11591157
)
11601158

11611159
tests := []struct {
@@ -1171,7 +1169,7 @@ func TestEncodeTokensToHeaders(t *testing.T) {
11711169
},
11721170
idToken: idToken, accessToken: "",
11731171
want: map[string]string{
1174-
"Authorization": "Bearer " + idTokenB64,
1172+
"Authorization": "Bearer " + idToken,
11751173
},
11761174
},
11771175
{
@@ -1182,8 +1180,8 @@ func TestEncodeTokensToHeaders(t *testing.T) {
11821180
},
11831181
idToken: idToken, accessToken: accessToken,
11841182
want: map[string]string{
1185-
"Authorization": "Bearer " + idTokenB64,
1186-
"X-Access-Token": "Bearer " + accessTokenB64,
1183+
"Authorization": "Bearer " + idToken,
1184+
"X-Access-Token": "Bearer " + accessToken,
11871185
},
11881186
},
11891187
{
@@ -1194,8 +1192,8 @@ func TestEncodeTokensToHeaders(t *testing.T) {
11941192
},
11951193
idToken: idToken, accessToken: accessToken,
11961194
want: map[string]string{
1197-
"X-Id-Token": "Other " + idTokenB64,
1198-
"X-Access-Token-Other": "Other " + accessTokenB64,
1195+
"X-Id-Token": "Other " + idToken,
1196+
"X-Access-Token-Other": "Other " + accessToken,
11991197
},
12001198
},
12011199
{
@@ -1206,7 +1204,7 @@ func TestEncodeTokensToHeaders(t *testing.T) {
12061204
},
12071205
idToken: idToken, accessToken: "",
12081206
want: map[string]string{
1209-
"Authorization": "Bearer " + idTokenB64,
1207+
"Authorization": "Bearer " + idToken,
12101208
},
12111209
},
12121210
{
@@ -1216,7 +1214,19 @@ func TestEncodeTokensToHeaders(t *testing.T) {
12161214
},
12171215
idToken: idToken, accessToken: accessToken,
12181216
want: map[string]string{
1219-
"Authorization": "Bearer " + idTokenB64,
1217+
"Authorization": "Bearer " + idToken,
1218+
},
1219+
},
1220+
{
1221+
name: "config with out preamble",
1222+
config: &oidcv1.OIDCConfig{
1223+
IdToken: &oidcv1.TokenConfig{Header: "X-ID-Token"},
1224+
AccessToken: &oidcv1.TokenConfig{Header: "X-Access-Token"},
1225+
},
1226+
idToken: idToken, accessToken: accessToken,
1227+
want: map[string]string{
1228+
"X-ID-Token": idToken,
1229+
"X-Access-Token": accessToken,
12201230
},
12211231
},
12221232
}

internal/oidc/token.go

-6
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
package oidc
1616

1717
import (
18-
"encoding/base64"
1918
"time"
2019

2120
"github.com/lestrrat-go/jwx/jwt"
@@ -36,8 +35,3 @@ func (t *TokenResponse) ParseIDToken() (jwt.Token, error) { return ParseToken(t.
3635
func ParseToken(token string) (jwt.Token, error) {
3736
return jwt.Parse([]byte(token), jwt.WithValidate(false))
3837
}
39-
40-
// EncodeToken returns the base64 encoded string representation of the token. Compatible with HTTP headers.
41-
func EncodeToken(token string) string {
42-
return base64.URLEncoding.EncodeToString([]byte(token))
43-
}

internal/oidc/token_test.go

-4
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,3 @@ func newToken() string {
5050
signed, _ := jwt.Sign(token, jwa.HS256, []byte("key"))
5151
return string(signed)
5252
}
53-
54-
func TestEncodeToken(t *testing.T) {
55-
require.Equal(t, "dGVzdA==", EncodeToken("test"))
56-
}

0 commit comments

Comments
 (0)