Ошибка 403 API данных YouTube недостаточное разрешение

#ios #swift #google-cloud-platform #youtube-data-api #google-signin

#iOS #swift #google-облачная платформа #youtube-data-api #google-вход

Вопрос:

Я работаю над приложением для IOS, использующим Swift, для которого требуется доступ к подпискам пользователя на YouTube. После добавления всех областей, которые мне нужны на облачной платформе Google, и внедрения GoogleSignIn в Firebase. Я вхожу в систему (GIDSignInButton), затем после выполнения этого запроса я получаю сообщение об ошибке, показанное ниже:

https://www.googleapis.com/youtube/v3/subscriptions?part=snippet,contentDetailsamp;mine=trueamp;key=(apiKey)amp;access_token=(Access_Token) .

Access_Token — это тот, который я получил после вызова:

     func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?){
    user.authentication.accessToken
....}
  

Ошибка, которую я получаю:

  ["error": {
        code = 403;
        errors =     (
                    {
                domain = global;
                message = "Insufficient Permission";
                reason = insufficientPermissions;
            }
        );
        message = "Request had insufficient authentication scopes.";
        status = "PERMISSION_DENIED";
    }]
  

В делегате приложения я установил это:

 GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
  

Ответ №1:

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

 GIDSignIn.sharedInstance().scopes.append("https://www.googleapis.com/auth/youtube.upload")
GIDSignIn.sharedInstance().signIn()
  

Ответ №2:

Во-первых, отбросьте параметр key=(apiKey) ; авторизация основана исключительно на access_token=(Access_Token) .

Обратите внимание, что токены доступа недолговечны. Вы можете отправить GET запрос HTTPS на:

https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=(Access_Token)

для проверки того, действителен ли ваш токен доступа. Предоставленный ответ будет выглядеть либо как:

 {
  "error": "invalid_token",
  "error_description": "Invalid Value"
}
  

или как:

 {
  "issued_to": "...",
  "audience": "...",
  "scope": "...",
  "expires_in": 3599,
  "access_type": "offline"
}
  

Затем дважды проверьте, что у вас есть необходимые области, подключенные к этому токену доступа, на случай, если он действителен.