web-dev-qa-db-fra.com

Comment réparer un "403 - disallowed_useragent" avec le SDK iOS Google Drive natif?

Je suis les instructions données à l'adresse: https://developers.google.com/drive/ios/quickstart?ver=Swift .

Hier, cela fonctionnait, mais ce matin, il semble toujours échouer. La partie étrange est que j'utilise leur SDK natif. Je ne sais pas pourquoi il croit que j'utilise une vue Web. L'erreur exacte est:

Cet agent d'utilisateur n'est pas autorisé à envoyer une demande d'autorisation OAuth à Google, car il est classé en tant qu'agent d'utilisateur intégré (également appelé vue Web). Selon notre politique, seuls les navigateurs sont autorisés à adresser une demande d'autorisation à Google. Nous proposons plusieurs bibliothèques et exemples pour les applications natives afin d'effectuer une demande d'autorisation dans le navigateur.

J'ai cloné: https://github.com/googledrive/ios-quickeditor et j'ai eu la même erreur.

5
eipipuz

essayez ceci, cela fonctionnera pour "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/41.0.2228.0 Safari/537.36"

Google restreint l'authentification à partir des vues Web. il accepte safari webkit useragent .override useragent avec la chaîne ci-dessus useragent, cela fonctionnera.

2

EDIT: Le commentaire ci-dessous s'applique toujours. Je travaille maintenant à nouveau dans Swift et voici le résultat et ce que j'ai fait (sur Github) . J'espère que cela épargnera à quelqu'un d'autre le travail de la journée pour résoudre le problème.


Voici la réponse malheureuse: Oui, vous utilisez l'exemple de Google iOS Quickstart , le "SDK natif" comme vous l'appelez. C’est toutefois dépassé, car il utilise exactement la vue Web intégrée que Google ne veut plus que vous utilisiez.

Si cela a fonctionné auparavant, mais que cela a cessé tout d'un coup (comme je l'ai moi-même expérimenté), il se peut que vous ayez à changer quelque chose lié à l'ID client. Pour les identifiants de client qui existent depuis un certain temps, il semble qu'il y ait un délai de grâce plus long jusqu'à ce que Google bloque durement l'utilisation de la vue Web (il devrait toujours y avoir un avertissement, pour le moment, je comprends). Un nouvel identifiant de client que j'ai créé récemment pour des raisons indépendantes, semble avoir justement provoqué cette situation, m'obligeant à devoir remplacer le code d'authentification de Google Drive pour une nouvelle version dans les meilleurs délais.

En ce qui concerne les options (que le seul autre correspondant à vos listes de questions de l'article de Google), après un peu de recherche, GTMAppAuth semble être l'option la plus viable, car je ne suis pas intéressé par une connexion complète des utilisateurs. et dehors. Mais je peux me tromper là-bas.

GTMAppAuth a un exemple de code pour iOS, mais uniquement en Objective-C. Je n'ai pas encore réussi à traverser ça. En général, la logique de votre code changera comme suit: Votre solution actuelle effectue l'authentification uniquement au sein de votre application. C'est asynchrone, mais ne quitte pas votre application. La nouvelle solution nécessite que vous initiiez une authentification au sein de votre application lors de la préparation et de la mémorisation de votre fonctionnalité de rappel. L'initiation de l'authentification ouvre alors un navigateur extérieur, ce qui, une fois cette opération effectuée, provoque un rappel d'URL dans le délégué de votre application. Dans le délégué de votre application, vous vérifiez alors que votre rappel est préparé et, en fonction de l'état du résultat de l'appel externe, avertissez l'utilisateur du succès ou de l'échec de l'authentification externe.

1
marco