AUTH-2235 GetTokenIfExists now parses JWT payload for json expiry field to detect if the cached access token is expired
This commit is contained in:
parent
1c6ea36e73
commit
6d63f84a75
|
@ -2,12 +2,14 @@ package token
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/cloudflare/cloudflared/cmd/cloudflared/config"
|
"github.com/cloudflare/cloudflared/cmd/cloudflared/config"
|
||||||
"github.com/cloudflare/cloudflared/cmd/cloudflared/path"
|
"github.com/cloudflare/cloudflared/cmd/cloudflared/path"
|
||||||
|
@ -34,6 +36,21 @@ type signalHandler struct {
|
||||||
signals []os.Signal
|
signals []os.Signal
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type jwtPayload struct {
|
||||||
|
Aud []string `json:"aud"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
Exp int `json:"exp"`
|
||||||
|
Iat int `json:"iat"`
|
||||||
|
Nbf int `json:"nbf"`
|
||||||
|
Iss string `json:"iss"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
Subt string `json:"sub"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p jwtPayload) isExpired() bool {
|
||||||
|
return int(time.Now().Unix()) > p.Exp
|
||||||
|
}
|
||||||
|
|
||||||
func (s *signalHandler) register(handler func()) {
|
func (s *signalHandler) register(handler func()) {
|
||||||
s.sigChannel = make(chan os.Signal, 1)
|
s.sigChannel = make(chan os.Signal, 1)
|
||||||
signal.Notify(s.sigChannel, s.signals...)
|
signal.Notify(s.sigChannel, s.signals...)
|
||||||
|
@ -147,7 +164,7 @@ func FetchToken(appURL *url.URL) (string, error) {
|
||||||
return string(token), nil
|
return string(token), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetTokenIfExists will return the token from local storage if it exists
|
// GetTokenIfExists will return the token from local storage if it exists and not expired
|
||||||
func GetTokenIfExists(url *url.URL) (string, error) {
|
func GetTokenIfExists(url *url.URL) (string, error) {
|
||||||
path, err := path.GenerateFilePathFromURL(url, keyName)
|
path, err := path.GenerateFilePathFromURL(url, keyName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -162,6 +179,17 @@ func GetTokenIfExists(url *url.URL) (string, error) {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var payload jwtPayload
|
||||||
|
err = json.Unmarshal(token.Payload, &payload)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if payload.isExpired() {
|
||||||
|
err := os.Remove(path)
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
return token.Encode(), nil
|
return token.Encode(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue