@@ -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
237234func (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
247303func (a * ClientProvider ) createLastActionDate () error {
0 commit comments