Auth0 - Ошибка проверки кода. Ошибка - PullRequest
0 голосов
/ 01 июня 2018

Я пишу скрипт, который использует auth0 для аутентификации с помощью удаленного API.

После этого урока: https://auth0.com/docs/api-auth/tutorials/authorization-code-grant-pkce

import (
    "crypto/rand"
    "crypto/sha256"
    "encoding/base64"
    "strings"
)

func genAuth0CodeVerifierChallance() (string, string) {

    // Generate random Code Verifier
    c := make([]byte, 32)
    rand.Read(c)
    code := base64.StdEncoding.EncodeToString(c)
    code = strings.Replace(code, "+", "-", -1)
    code = strings.Replace(code, "/", "_", -1)
    code = strings.Replace(code, "=", "", -1)

    // Generate auth0 challange
    ch := sha256.Sum256([]byte(code))
    challange := base64.StdEncoding.EncodeToString(ch[:])
    challange = strings.Replace(challange, "+", "-", -1)
    challange = strings.Replace(challange, "/", "-", -1)
    challange = strings.Replace(challange, "=", "", -1)

    return code, challange
}

Я использую эту функцию для создания вызова кода, например eQM2dqasJN3-gXcM0g1Se-CmAn8PyU7c5uHRKU7Exa0

Я создаю сообщение HTTP сполезная нагрузка

p := &payloadData{
        GrantType:    "authorization_code",
        ClientId:     "...............................", (removed)
        CodeVerifier: codeChallenge, 
        Code:         code, (example: AuL3ArApgQ4QDu_9)
        RedirectUri:  "http://127.0.0.1:16272/oauth/token",
}

...marshal json...

req, _ := http.NewRequest("POST", "https://my-app.eu.auth0.com/oauth/token", bytes.NewBuffer(payload))

Я получаю сообщение об ошибке:

{403 Запрещено 403 ...

{"error": "invalid_grant", "error_description": "Failed toпроверить код проверки "}

В других ссылках на это сказано, что символы не были должным образом закодированы / заменены в вызове, закодированном в base64.

Я пробовал использовать следующие две кодировки для /

code = strings.Replace(code, "+", "-", -1)
code = strings.Replace(code, "/", "_", -1)
code = strings.Replace(code, "=", "", -1)

и

code = strings.Replace(code, "+", "-", -1)
code = strings.Replace(code, "/", "-", -1)
code = strings.Replace(code, "=", "", -1)

Но я всегда получаю:

{"error":" invalid_grant "," error_description ":" Не удалось проверить верификатор кода "}

1 Ответ

0 голосов
/ 02 июня 2018

Я столкнулся с той же ошибкой при реализации Auth0 PKCE:

{"error":"invalid_grant","error_description":"Failed to verify code verifier"}

В моем случае ошибка была вызвана случайной отправкой разных верификаторов в URL-адресе авторизации и в Token Exchange.Я выполнил некоторую регистрацию как URL-адреса авторизации, так и тела запроса Token Exchange, чтобы выяснить это и рекомендовать вам сделать то же самое.

У меня есть рабочая демонстрационная реализация, которую вы можете попробовать.Это HTTP-сервер, а не нативное приложение, но он успешно выполняет потоки PKCE.

Обратите внимание, вам не нужно вручнуюзамените + и /, поскольку Go поддерживает это, используя base64.URLEncoding вместо StdEncoding следующим образом:

strings.Trim(base64.URLEncoding.EncodeToString(data), "=")

В дополнение к документации Auth0, дополнительная информация о PKCE OAuth 2.0 доступна вIETF RFC-7636:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...