1

Тема: Як робе OAuth2.0, та як відізвати токен?

Вітаю.
Я працюю з OAuth2.0 API одного сервісу, та роблю це, аби додати можливість авторизації.

Для отримання токена я перенаправляю користувача на адресу, що виглядає наступним чином

https://discordapp.com/api/oauth2/authorize?client_id=<ID клієнта>&redirect_uri=<адреса для перенаправлення після авторизації на сайті сервісу (адреса мого сайту, або localhost)>&response_type=token&scope=identify

коли користувач переходе по цьому посиланню, сервіс запитує його, чи дозволяє той авторизацію, та чи надає дозволи моєму додаткові на виконання певних операцій (ID клієнта - це ID мого додатку), після чого, якщо користувач дозволяє, то його перенаправляють за адресою, котра вказується як "redirect_uri".

В параметрах цієї адреси додається токен, котрий я парсю, та потім додаю в заголовок "Authorization" в форматі "Bearer <токен>", після чого я можу звертатись до API сервісу та отримувати інфу про користувача, котрий дав дозволи на то все.


Нехай я хочу відізвати того токена, або ж "вийти" (logout) користувачем з мого додатку.

Для цього в документації https://discord.com/developers/docs/topics/oauth2 є посилання
https://discord.com/api/oauth2/token/revoke

я відправляю POST запит по тому посиланню, (токен так само в заголовку), але кожного разу воно відправляє мені помилку

{error: "invalid_client"}

Я вже додавав

client_id=<ID клієнта>

як в саме посилання, так і як body POST запиту, але все одно те саме.

Можливо, я не зовсім розумію, як те OAuth2.0 повинно працювати, і роблю щось не так?

2

Re: Як робе OAuth2.0, та як відізвати токен?

Спробуйте ще додати значення client_secret

Подякували: FakiNyan1

3

Re: Як робе OAuth2.0, та як відізвати токен?

VTrim написав:

Спробуйте ще додати значення client_secret

не робе, та сама помилка
пробував і в url то вставляти, і як тіло post запиту

4

Re: Як робе OAuth2.0, та як відізвати токен?

Ну як правило, треба передавати client_id, client_secret, token

5

Re: Як робе OAuth2.0, та як відізвати токен?

VTrim написав:

Ну як правило, треба передавати client_id, client_secret, token

в тілі, чи в юрл?

6

Re: Як робе OAuth2.0, та як відізвати токен?

В тілі

Подякували: FakiNyan1

7

Re: Як робе OAuth2.0, та як відізвати токен?

VTrim написав:

В тілі

не робе, та сама помилка вилазе

8

Re: Як робе OAuth2.0, та як відізвати токен?

Прихований текст

переходе, робе ...

Говоріть українською! Живіть українською! Відчувайте українською!

:D новозеленська мова ))

збираю такі перлини, де букву "и" замінили буквою "е",
трішки вже назбиралось:

"степендія, медецина, презедент, тереторія, цебуля, знищети, вірете, кретичному, зберається, жевеш, вилосепед, печево, виходете, мовчете ... "

:D давайте ще))

9

Re: Як робе OAuth2.0, та як відізвати токен?

Я розібравсь.
Моя проблема була в форматі реквесту. Я відправляв JSON дані, але при цьому встановлював заголовок

Content-Type: application/x-www-form-urlencoded

а потрібно було передавати дані в формі FormData, і видалити оті заголовки

const formData = new FormData();
    formData.append(`client_secret`, `<client_secret>`);
    formData.append(`client_id`, `<client_id>`);
    formData.append(`token`, this.token);
    this.http.post(`${this.revokeEP}`, formData).subscribe(...

і все запрацювало.

10

Re: Як робе OAuth2.0, та як відізвати токен?

тобто, саме встановлення певних заголовків не перетворює тим даних, що відправляються, якщо відправляється json, то він залишиться json'ом, навіть якщо заголовок каже, що то борщ зі сметаною