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

Commit 4cdfb61

Browse files
authored
Merge pull request #35 from LF-Engineering/test-auth0-manager
Fix auth0 manager key validation
2 parents 20b740c + 085d641 commit 4cdfb61

3 files changed

Lines changed: 63 additions & 267 deletions

File tree

auth0/token.go

Lines changed: 62 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ type ClientProvider struct {
3939
AuthClientSecret string
4040
AuthAudience string
4141
AuthURL string
42-
AuthSecret string
4342
Environment string
4443
httpClient HTTPClientProvider
4544
esClient ESClientProvider
@@ -56,7 +55,6 @@ func NewAuth0Client(esCacheURL,
5655
authClientSecret,
5756
authAudience,
5857
authURL string,
59-
authSecret string,
6058
httpClient HTTPClientProvider,
6159
esClient ESClientProvider,
6260
slackClient SlackProvider) (*ClientProvider, error) {
@@ -69,7 +67,6 @@ func NewAuth0Client(esCacheURL,
6967
AuthClientSecret: authClientSecret,
7068
AuthAudience: authAudience,
7169
AuthURL: authURL,
72-
AuthSecret: authSecret,
7370
Environment: env,
7471
httpClient: httpClient,
7572
esClient: esClient,
@@ -235,13 +232,72 @@ var searchCacheQuery = map[string]interface{}{
235232
}
236233

237234
func (a *ClientProvider) isValid(token string) bool {
238-
t, err := jwt.Parse(token, func(_ *jwt.Token) (interface{}, error) { return []byte(a.AuthSecret), nil })
239-
if err != nil || !t.Valid {
235+
p, err := jwt.Parse(token, func(t *jwt.Token) (interface{}, error) {
236+
if _, ok := t.Method.(*jwt.SigningMethodRSA); !ok {
237+
return nil, errors.New("unexpected signing method")
238+
}
239+
240+
cert, err := a.getPemCert(t)
241+
if err != nil {
242+
return nil, err
243+
}
244+
245+
key, err := jwt.ParseRSAPublicKeyFromPEM([]byte(cert))
246+
if err != nil {
247+
return nil, err
248+
}
249+
250+
return key, nil
251+
})
252+
if err != nil || !p.Valid {
240253
log.Println(err)
241254
return false
242255
}
243256

244-
return t.Valid
257+
return p.Valid
258+
}
259+
260+
// Jwks result from auth0 well know keys
261+
type Jwks struct {
262+
Keys []JSONWebKeys `json:"keys"`
263+
}
264+
265+
// JSONWebKeys auth0 token key
266+
type JSONWebKeys struct {
267+
Kty string `json:"kty"`
268+
Kid string `json:"kid"`
269+
Use string `json:"use"`
270+
N string `json:"n"`
271+
E string `json:"e"`
272+
X5c []string `json:"x5c"`
273+
}
274+
275+
func (a *ClientProvider) getPemCert(token *jwt.Token) (string, error) {
276+
cert := ""
277+
//resp, err := http.Get(a.AuthURL + "/.well-known/jwks.json")
278+
fmt.Println(fmt.Sprintf("%s/.well-known/jwks.json", a.AuthURL))
279+
_, resp, err := a.httpClient.Request(fmt.Sprintf("%s/.well-known/jwks.json", a.AuthURL), "GET", nil, nil, nil)
280+
if err != nil {
281+
return cert, err
282+
}
283+
284+
var jwks = Jwks{}
285+
if err := json.Unmarshal(resp, &jwks); err != nil {
286+
return cert, err
287+
}
288+
289+
for _, k := range jwks.Keys {
290+
if token.Header["kid"] == k.Kid {
291+
cert = "-----BEGIN CERTIFICATE-----\n" + k.X5c[0] + "\n-----END CERTIFICATE-----"
292+
}
293+
}
294+
295+
if cert == "" {
296+
err := errors.New("unable to find appropriate key")
297+
return cert, err
298+
}
299+
300+
return cert, nil
245301
}
246302

247303
func (a *ClientProvider) createLastActionDate() error {

auth0/token_test.go

Lines changed: 0 additions & 260 deletions
This file was deleted.

orgs/organization.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ func buildServices(o *Org) (*http.ClientProvider, *auth0.ClientProvider, *elasti
166166
}
167167

168168
httpClientProvider := http.NewClientProvider(time.Minute)
169-
auth0ClientProvider, err := auth0.NewAuth0Client(o.ESCacheURL, o.ESCacheUsername, o.ESCachePassword, o.Environment, o.AuthGrantType, o.AuthClientID, o.AuthClientSecret, o.AuthAudience, o.AuthURL, o.AuthSecret, o.httpClient, o.esClient, o.slackProvider)
169+
auth0ClientProvider, err := auth0.NewAuth0Client(o.ESCacheURL, o.ESCacheUsername, o.ESCachePassword, o.Environment, o.AuthGrantType, o.AuthClientID, o.AuthClientSecret, o.AuthAudience, o.AuthURL, o.httpClient, o.esClient, o.slackProvider)
170170
if err != nil {
171171
return nil, nil, nil, err
172172
}

0 commit comments

Comments
 (0)