Youtube OAuth promts окно авторизации каждый раз, когда я делаю запрос

вот мой рабочий поток для получения маркера доступа и токена обновления для YouTube api. Im генерации url авторизации с параметрами

access_type=offline, response_type=code, redirect_uri=uri, scope=scopes, state=state, client_id=id

из url авторизации Im, получающего код аутентификации, затем Im, генерирующий другой url, чтобы получить access_token и refresh_token, используя код из url авторизации с этими параметрами

код: код, client_id: CLIENT_ID, секрет клиента: секрет клиента, параметр redirect_uri: serviceCallback, состояние: состояние.обратного вызова, grant_type: "код"

насколько я знаю, пользователь должен завершить этот процесс только один раз, а затем она должна быть автоматической. Моя проблема в том, что Im всегда должен завершить авторизацию, и Im всегда получает новый access_token и refresh_token, не заставляя его по запросу.

вот часть кода, где я получаю проверки подлинности URL-адрес

getAuthUrl: function(scopes, applicationCallback, serviceCallback, siteId,
selectChannel, websiteUrl) {
var requestedClientId = CLIENT_ID;
var scopess =
  "https://www.googleapis.com/auth/yt-analytics.readonly https://www.googleapis.com/auth/youtube.readonly https://www.googleapis.com/auth/userinfo.email " +
  scopes.replace(",", " ");

return "https://accounts.google.com/o/oauth2/auth?" +
  "access_type=offline" +
  "&response_type=code" +
  /*"&approval_prompt=auto" +*/
  "&redirect_uri=" + serviceCallback +
  "&scope=" + scopes +
  "&state=" + JSON.stringify({
    service: NAME,
    callback: applicationCallback,
    scopes: scopes,
    siteId: siteId,
    selectChannel: selectChannel,
    websiteUrl: websiteUrl
  }) +
  "&client_id=" + requestedClientId;
  },

оттуда я получаю код и используя этот код, clientID и clientSecret, чтобы получить токен доступа и обновить токен

getAuthTokens: function(code, state, res, serviceCallback) {
// Google oAuth endpoint
var endpoint = "https://www.googleapis.com/oauth2/v4/token";
const scopes = state.scopes.split(" ");
// Setup request data
var data = {
  code: code,
  client_id: CLIENT_ID,
  client_secret: CLIENT_SECRET,
  redirect_uri: serviceCallback,
  state: state.callback,
  grant_type: "authorization_code"
};


request.post(endpoint).send(data).type('form').set('Accept',
      'application/json').end(function(err, oAuthResponse) {});
    },

я использовал неправильный url конечной точки, я изменил его на другой, предоставленный документацией YouTube api, и удалил параметр состояния из переменной данных, но все еще не исправил проблему

новый URL-адрес конечной точки

var endpoint = "https://accounts.google.com/o/oauth2/token";

Im действительно запутался прямо сейчас, потому что я не заставляю авторизацию и на раздел google apps есть мое приложение уже авторизовано, и оно не обновляет авторизацию, что означает, что оно дает разрешение только в первый раз, и после этого, когда я нажимаю кнопку Разрешить, он ничего не делает. OAuth должен проверить, есть ли у меня токен обновления или нет, поэтому мой вывод заключается в том, что я не полностью понимаю, как он должен работать, или Im каким-то образом тестирует все в отладочном или тестовом режиме, где приглашение авторизации автоматически принудительно.

Я был бы очень благодарен за любую помощь потому что я чувствую, что перепробовал все.

2 ответов


на вопрос это access token Что вы используете истек до следующего раза, когда вы используете, как у вас есть не обновлял access token вручную с помощью refresh token.

вам нужно использовать refresh token обновить access token Если [(время последнего обновления маркера доступа) + (время истечения срока действия)] уже превзошло.

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

документация API YouTube демонстрирует процедуру здесь

по умолчанию время истечения составляет около 3 секунд.

Это конечно, работайте в вашем случае.


идем в Настройки Аккаунты Google на этот счет---> перейти в связанные приложения и сайты ----> Управление приложениями: Там вы можете увидеть разрешения для youtube, как это:enter image description here