Неявный поток грантов Yahoo OAuth2 не работает для нового приложения Yahoo - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть веб-приложение и выделенное Приложение Yahoo работает.Он использует OAuth2 Implicit Grant Flow

Теперь я хочу настроить другой домен, работающий по тому же принципу.Я создал новое приложение Yahoo с новым доменом обратного вызова New Yahoo app

URL-адрес, используемый для получения согласия пользователя (в обоих случаях), равен https://api.login.yahoo.com/oauth2/request_auth?client_id=consumer_key&redirect_uri=https://redir_url&response_type=token

Он работает для старого домена и старого приложения Yahoo (ключ потребителя заканчивается -), но он не хочет работать с новым доменом и новым приложением Yahoo (ключ потребителя НЕ заканчивается - по некоторым причинам).

Я получаю это сообщение после просмотра согласия пользователя ссылка :

Разработчики: выберите типы ответов из кода, токена или id_token и отправьте снова.

хотя я предоставил действительный response_token .Вы знаете причину, по которой он не работает для нового домена и нового приложения Yahoo?

код:

var authorizationUrl = 'https://api.login.yahoo.com/oauth2/request_auth'
            + '?client_id=' + encodeURIComponent(consumerKey)
            + '&redirect_uri=' + encodeURIComponent(redirectUri)
            + '&response_type=token';

window.open(authorizationUrl, '_blank', 'location=yes,height=570,width=650,scrollbars=yes,status=yes');

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вы можете предоставить 2 различных значения параметру response_type.

В случае response_type=token - после перенаправления к вашему URL-адресу перенаправления должен быть добавлен токен доступа, например:

<a href="http://myurl/?access_token=XXXYYY" rel="nofollow noreferrer">http://myurl/?access_token=XXXYYY</a>

Однако - это считается менее безопасным, чем идти в другую сторону, так как в этом случае вам будет открыт токен доступа.(Например, плагины браузера могут иметь доступ к URL-адресу, который они могут использовать в этом случае)

В случае response_type=code - к вашему URL-адресу перенаправления должен быть добавлен код, например:

<a href="https://myurl/?code=XXXYYY" rel="nofollow noreferrer">https://myurl/?code=XXXYYY</a>

Затем вы получите этот код со стороны сервера и отправите его поставщику OAuth2 (в данном случае Yahoo) с вашими client_id и client_secret в обмен на access_token.Это более безопасно, поскольку только ваша сторона сервера теперь имеет доступ к access_token, а не к любому другому механизму.Обычно это был бы почтовый запрос к некоторой конечной точке Yahoo, например:

http.post(
  url: 'someyahoourl', /* probably something like https://api.login.yahoo.com/oauth2/request_auth */
  data:
  {
     client_secret: yourclientsecret,
     client_id: yourclientid, /* Judging by the url it's dj0yJmk9WGx0QlE0UWdCa0hKJmQ9WVdrOWNrNUhXVnBhTkhFbWNHbzlNQS0tJnM9Y29uc3VtZXJzZWNyZXQmeD01OA-- */
     code: thecodefromurl,
     grant_type: 'authorization_code',
     redirect_uri: the redirect uri that you've retrieved the code from
  }

И тогда ваш сервер получил бы access_token в ответ на этот запрос.

0 голосов
/ 10 декабря 2018

Похоже, что API запрашивает буквальное слово "id_token" (или "code" или "token") в качестве параметра response_type.Вы не опубликовали свой код, но похоже, что вы фактически вводите значение id response_token для этого параметра.

Глядя на документацию по API Yahoo , вот пример URL, похожий на ваш:

https://api.login.yahoo.com/oauth2/request_auth?client_id=dj0yJmk9WGx0QlE0UWdCa0hKJmQ9WVdrOWNrNUhXVnBhTkhFbWNHbzlNQS0tJnM9Y29uc3VtZXJzZWNyZXQmeD01OA--&response_type=id_token&redirect_uri=https://yahoo.com&scope=openid%20mail-r&nonce=YihsFwGKgt3KJUh6tPs2

Вы можете видеть, что они написали: &response_type=id_token, а не &response_type=934984kklsdkjklfs или подобное.

Как правило, вызовы API OAuth обычно отправляют обратно токен доступа или токен ответа, который действителен для вашего сеанса API и в конце концов истекает.Этот параметр описывает, какой тип токена вы хотите, чтобы API возвращал.

Я не могу говорить о том, что могло измениться между двумя версиями вашего приложения, но я рекомендую вам проверить версия и Что нового раздел документации по API Yahoo.

...