50 votes

403 Error - C'est une erreur. Erreur : disallowed_useragent

J'essaie d'autoriser un utilisateur à utiliser l'API Calendrier de Google dans une application IOS. J'utilise la fonction OAuth2 de Google pour authentifier les utilisateurs. La page d'autorisation s'ouvre sur une erreur 403 avec la description suivante :

Cet agent utilisateur n'est pas autorisé à faire une demande d'autorisation OAuth à Google, car il est classé comme agent utilisateur intégré (également appelé "web-view"). Conformément à nos règles, seuls les navigateurs sont autorisés à envoyer des demandes d'autorisation à Google. Nous proposons plusieurs bibliothèques et échantillons pour les applications natives afin d'effectuer des demandes d'autorisation dans le navigateur.

J'ai suivi la même procédure qui est mentionnée dans ce lien : https://developers.google.com/google-apps/calendar/quickstart/ios

Plutôt que de voir mon code, il est préférable de regarder ce lien : https://developers.google.com/google-apps/calendar/quickstart/ios parce que j'ai copié-collé la même chose dans mon application.

ci-dessous sont mon clientId et mon keyChainItemName :

static NSString *const kKeychainItemName = @"Google Calendar API";
static NSString *const kClientID = @"954370342601-sgl8k0jrbqdeagea9v6vfu3tspte96ci.apps.googleusercontent.com";

0 votes

Montrez votre code source

0 votes

Quelle approche avez-vous adoptée ?

0 votes

@Subbhu Avez-vous trouvé une solution à ce problème ?

36voto

Dipen Chudasama Points 2204

Dans mon cas, j'utilisais une vue web native pour me connecter avec Google, j'ai découvert la façon dont vous devez fournir l'agent utilisateur à la vue web et cela a fonctionné pour moi. Essayez le code ci-dessous, je suis sûr que cela va fonctionner.

Ajoutez le code dans application didFinishLaunchingWithOptions

Objectif C

 NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36", @"UserAgent", nil];
 [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];

Swift 3.0

let dictionary = NSDictionary(object: "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36", forKey: "UserAgent" as NSCopying)
UserDefaults.standard.register(defaults: dictionary)

2 votes

Juste pour clarifier la solution Objective C. Ajoutez ce code à : (BOOL)application :(UIApplication *)application didFinishLaunchingWithOptions :(NSDictionary *)launchOptions {}

0 votes

Donne toujours la même erreur. Quelqu'un d'autre est-il toujours confronté au même problème ?

1 votes

Cela a bien fonctionné pour moi. Vous pouvez utiliser un UserAgent plus récent en en trouvant un ici developers.whatismybrowser.com/useragents/explore/software_name/ et la chaîne c/p

17voto

Hardeep Singh Points 420
<preference name="OverrideUserAgent" value="Mozilla/5.0 Google" />

Je suis également confronté à ce problème sur mon projet Cordova. Vous pouvez essayer ceci : Ajoutez simplement ceci à votre config.xml, cela a fonctionné pour moi.

0 votes

Désolé pour cela. mon code n'a pas montré correctement avant maintenant je le corrige. vous pouvez l'essayer maintenant. <preference name="OverrideUserAgent" value "Mozilla/5.0 Google" />

2 votes

Le même problème que je rencontre sous Android, pouvez-vous me suggérer comment le résoudre ?

0 votes

Pouvez-vous m'expliquer quelle plateforme vous utilisez pour créer une application Android. Comme Cordova, Ionic ou des applications Android natives dans Android Studio.

15voto

Rhishikeshj Points 237

La réponse courte est que Google a mis à jour ses restrictions de sécurité pour le flux OAuth. Ils ne vont pas autoriser les vues web natives à initier des flux OAuth, mais encouragent plutôt les gens à utiliser les navigateurs de l'OS pour le faire. Dans votre cas, vous devrez probablement attendre que le SDK du calendrier Google mette à jour son code pour obéir au nouveau flux recommandé. De plus amples informations sont disponibles dans le Le blog de Google

EDIT : J'ai essayé de créer un plugin multiplateforme qui englobe les SDK natifs de Google sign-in pour les utiliser dans une application Xamarin forms. Plus d'informations peuvent être trouvées aquí

0 votes

Merci beaucoup @Rhishkeshj mais cela ne donne pas de solution pour ce problème. Je veux savoir s'il existe d'autres alternatives. Je suis toujours à la recherche de réponses.

0 votes

Le problème a également été enregistré pour le lecteur code.google.com/a/google.com/p/apps-api-issues/issues/

0 votes

@Subbu Malheureusement, il n'y a pas de solution facile pour l'instant. La chose que j'ai faite a été d'utiliser les SDK natifs de Google et de les intégrer séparément dans les projets iOS et Droid. Cela semble fonctionner assez bien, bien que l'utilisation d'un PCL soit actuellement très limitée pour cela. J'essaie de développer cette configuration dans un plugin autonome. Voyons voir.

9voto

J'ai le même problème. Résolu en définissant la propriété suivante pour l'objet webview :

webview.getSettings().setUserAgentString("Chrome/56.0.0.0 Mobile");

J'espère que cela vous aidera.

8voto

Maksim Pavlov Points 179

Comme mentionné dans les réponses précédentes, SFSafariViewController est une voie à suivre, mais pour ceux qui utilisent toujours WKWebView pour l'autorisation OAuth, il existe une solution de contournement simple.

Changez juste customUserAgent à l'un ou l'autre des éléments suivants liste ou le fixer à une valeur arbitraire. Après cela disallowed_useragent L'erreur disparaîtra :

WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
// Check for selector availability, as it is available only on iOS 9+
if ([webView respondsToSelector:@selector(setCustomUserAgent:)]) {
    webView.customUserAgent = @"MyCustomUserAgent";
}

Pour changer User-Agent en UIWebView vous pouvez vérifier cette réponse .

Mais faites attention, car certains codes backend peuvent dépendre de User-Agent valeur de l'en-tête.

0 votes

Cela fonctionne parfaitement pour moi :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X