«Параметры запроса URL-адреса InvalidRequest недопустимы» Django -oauth2 500 error - PullRequest
0 голосов
/ 02 марта 2020

Префикс: я новичок в django.

Стек: oAuth2 + протокол PKCE, Angular, Django -oauth2-toolkit + REST

Продолжаю получать:

oauthlib.oauth2.rfc6749.errors.InvalidRequestError: (invalid_request) URL query parameters are not allowed <oauthlib.Request SANITIZED>

Никаких подробностей об ошибках в отношении содержимого запроса.

при попадании на сервер django oauth2 с запросом POST в формате pkce в Angular, например,

 requestToken(code: string, state: string) {
    const clientState = sessionStorage.getItem('pkce-state');
    if (clientState !== state) {
      console.error('States do not match!');
    }
    const verifier = sessionStorage.getItem('pkce-verifier');

    return this.http.post('http://localhost:8000/o/token/',
      {
        headers: new HttpHeaders({'Content-Type': 'application/x-www-form-urlencoded'})
      },
      {
        params:
          new HttpParams()
            .set('grant_type', 'authorization_code')
            .set('code', code)
            .set('redirect_uri', 'http://localhost:4200/dashboard')
            .set('client_id', 'CLIENT_ID')
            .set('state', state)
            .set('verifier', verifier)
      });
    }

Не уверен, что происходит не так.

PS Ничто не выглядит закодированным, когда запрос напечатан в журнале django. Задача и верификатор работают иначе, ошибка будет указывать на это.

1 Ответ

0 голосов
/ 03 марта 2020

Выяснил, что удаление httpParams и добавление параметров в качестве тела не выдает ошибку 500. Теперь у меня есть другая ошибка, но формат запроса как минимум более точный.

    return this.http.post('http://localhost:8000/o/token/',
  {
    grant_type: 'authorization_code',
    redirect_uri: 'http://localhost:4200/dashboard',
    client_id: 'CLIENT_ID',
    code,
    state,
    verifier
  },
  {
    headers: new HttpHeaders({'Content-Type': 'application/x-www-form-urlencoded'})
  },
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...