| 107 | } |
| 108 | |
| 109 | func (client Client) getJtiFromToken(token string) (string, error) { |
| 110 | segments := strings.Split(token, ".") |
| 111 | |
| 112 | if len(segments) < 2 { |
| 113 | return "", errors.New("access token missing segments") |
| 114 | } |
| 115 | |
| 116 | jsonPayload, err := base64.RawURLEncoding.DecodeString(segments[1]) |
| 117 | |
| 118 | if err != nil { |
| 119 | return "", errors.New("could not base64 decode token payload") |
| 120 | } |
| 121 | |
| 122 | payload := make(map[string]interface{}) |
| 123 | err = json.Unmarshal(jsonPayload, &payload) |
| 124 | if err != nil { |
| 125 | return "", err |
| 126 | } |
| 127 | |
| 128 | jti, ok := payload["jti"].(string) |
| 129 | |
| 130 | if !ok { |
| 131 | return "", errors.New("could not parse jti from payload") |
| 132 | } |
| 133 | |
| 134 | return jti, nil |
| 135 | } |