Невозможно проверить действительный токен с помощью ДЕЙСТВИТЕЛЬНОГО секрета - PullRequest
2 голосов
/ 28 мая 2020

Я погуглил 2 страницы и не нашел решения проблемы. Токен, а также ключ publi c действительны,

Вот ссылка на jwt debugger

И реализацию

package internal

import (
    "fmt"
    "log"
    "net/http"

    "github.com/dgrijalva/jwt-go"
)

const publicKey = `-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1PlcNpfUNweGd3eSRLuF
Cp0kZpdsO9tzHCkKMxgaU3jvQI9BzWPdljJfxwEedmEWlJ9G/4oCLdB0w5JhYNoR
uOvs02/goDduPWlnr9cwRsGG3hFDbY8oJ4i9APj6jQFCTvP+yfI7e12SV6RDb58z
7qO4g1BJqoc8sXPk/VsFQMnNuTs7qLM1aWl3uZUXqSrCqJY92YerbDdH5J8LFEi7
aTL7opu1GZ8s75SRWpzg5AjdXGseEm5sjGpURSdmPq8hH7u6+AQBZPTy9ozsgX2V
2Hj0X8Q/AAzrh4mFpnVj8mT/Kny7OcG+yjW+Nwqnq2zFeuyQISQgAMzrnn2GClsi
KUET2yRV2+5l5VZOhLDc8mF6vU2L5aSwZ2zoTGEt/su44tMRXQwoBK99yS7R59pg
IV5x2wusPUmz0IS3y0b6PlLUb4BdMhBLBN1Wy+hIuN1HCptOeKrqvaCrA3ABP/9O
/xJUK8xJDPZS+YW47uJqxk1Hon4ql9dEjOb8Q1onuhC1BRKbWcx3qTOEGbxaT0hT
gX2cTZ8dsFB3iJkDAS0/Xx6nO+a/xgXsWluUkvmrfbYlVgcz3inDWRQ3hSGjvnHK
DJZQju2Vi+v/F9joKUKb8AYnkE1vkRoAgYQ84rU+VpEk+iVL7xtVP63noMUyqtha
aPMC597mD4QGFw7wcXcxCx0CAwEAAQ==
-----END PUBLIC KEY-----`

const testToken = `eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjVlYzI4ZWEwMzgyMjI3ZDM4MzA4ZWI1ZiIsImlhdCI6MTU5MDY5NDM2MCwiZXhwIjoxNTkwNzgwNzYwfQ.nkP8Ot8bdLy_HwJ05IEMcZY5rpkMGbnMjMRtNrNKhm9UX3yMCWra3mwqnWQSXLoqSucxm3ngF4bsuegxVxczdzFj34cjeAtJZ21YFlNYq6y7FoEsTB3HZ4SXkbLeiCireVVzj1-ynbE0u97wELtjZ8mhkD29CesxRUNtaMP39cZk_nPz62oQQVnUYTE7CrN13mmlkWHC0hGxk_qNe-x9XvGWbVdJlmguuA1IrS3X6xNCk17igcWD97B3yAWSMAryXtJMuMGIX8lC0nGKIUhg-eumeziSB1j12LIAvVlY3bd6zRHsTUJjr8dQpP6T-kZk1zUAZRcl9CFX0a8XWoXjNsK6-NngovvnxK2eM-_QYPtUjMBt0bN89hnYycfnvT8ItdUQwkEpBzqMyeU2Bc1YslJZE9oz0MJ3PZ5iuOV4yKULyOmVJyESs_ViOUzCrzPbfvPXMVmdpabn3j8FHS6X8ixoixjqtNHv1WItN8BMsm377cdB_QyxKLHgbrd_DfiCXKxC01szttPgF5B9-8mxvv7VpZuIpQ7-KnStrJgfRVKaD5dPIHoLRHKRgO-fZ0tLDB4D5hdj1zs32JUZUQ-uQew0p3lXpYmWku67n8U_WVXUD8YOPTD6GVMdiAB8cZl1hOMAs1tjicIhnE7VLwK1ogOAJVq6OTpuVmmD5ALRxyI`


func VerifyToken() bool {

    claims := jwt.MapClaims{}

    token, err := jwt.ParseWithClaims(testToken, claims, func(token *jwt.Token) (interface{}, error) {
        return []byte(publicKey), nil
    })
    log.Printf("%v", err)
    log.Printf("%v", token.Valid)
    for key, val := range claims {
        fmt.Printf("Key: %v, value: %v\n", key, val)
    }

    return true
}

Несмотря ни на что, проверка не удалась. Однако он работает с библиотекой Node.JS, а также с вышеупомянутым отладчиком jwt.

1 Ответ

3 голосов
/ 28 мая 2020

Вы пытаетесь проверить токен с помощью ключа, закодированного в PEM. Вы должны расшифровать ключ и проанализировать его для проверки. Для проверки требуется ключевой объект в зависимости от алгоритма подписи:

token, err := jwt.ParseWithClaims(testToken, claims, func(token *jwt.Token) (interface{}, error) {
    block, _ := pem.Decode([]byte(publicKey))
    if block==nil {
        // return error
    }

    return x509.ParsePKIXPublicKey(block.Bytes)
 })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...