10 votes

Comment obtenir un jeton CSRF dans iOS ?

J'essaie de transférer des données de formulaire vers le site de mon collègue afin de me connecter (simple nom d'utilisateur et mot de passe) depuis mon application iPhone. Cependant, il semble que j'ai besoin d'un jeton CSRF pour pouvoir poster. J'ai fait beaucoup de recherches à ce sujet et d'après ce que je peux obtenir ce jeton à partir de l'adresse suivante csrftoken cookie ( Je l'ai lu ici : https://docs.djangoproject.com/en/dev/ref/contrib/csrf/ ) en utilisant une requête GET. Le problème est que je ne sais pas exactement ce qu'il faut faire avec cette requête GET ? Où dois-je aller ?

Voici le code jusqu'à présent pour ma demande de poste :

NSURL *url = [NSURL URLWithString:SERVER_ADDRESS];
NSData* postData= //Some form data
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"%d", postData.length] forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];

[request addValue:token forHTTPHeaderField:@"X-CSRFToken"];  //Where do I get this token from

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
                                                              delegate:self];
[connection start];

Je sais qu'il y a beaucoup de messages similaires à celui-ci sur StackOverflow, mais je n'en ai trouvé aucun avec une réponse qui semble complète. En général, ils me dirigent vers le lien ci-dessus qui n'est rempli que d'informations relatives à AJAX. De l'aide serait très appréciée !

0voto

Sebastian Wozny Points 3929

Comme indiqué dans les commentaires, vous pouvez l'analyser à partir de n'importe quelle page contenant un formulaire sur le site Web de votre ami.

Si vous voulez en avoir un pour vous, demandez-lui de rendre ce modèle à /ios/

ios.html :

{% csrftoken %}

Ensuite, lancez un Demande GET : 2 Vous pouvez analyser la valeur du jeton à l'aide d'une expression rationnelle :

NSString *regex = @"csrfmiddlewaretoken\".*?\"\(.*?\)\"";

Enfin, vous devez définir la valeur de l'élément X-CSRFToken sur vos prochaines requêtes HTTP POST.

0voto

matias elgart Points 783

Pour pouvoir se connecter (POST) avec le jeton, il faut bien sûr obtenir d'abord le jeton CSRF, comme vous l'avez dit. si vous faites d'abord un appel GET à la page de connexion (avant de poursuivre avec un POST), le résultat de la page de connexion renverra un csrf_token que vous pouvez voir si vous utilisez un navigateur (avec le volet ouvert des outils de développement), et regardez le volet réseau sous le contenu de la réponse pour voir le cookie csrftoken défini par le serveur. dans mon cas :

Set-Cookie:csrftoken=PgQEgY3LAynbVeWRIzXoo2VFRLfd8Uqt; expires=Fri, 10-Nov-2017 18:59:54 GMT; Max-Age=31449600; Path=/; secure

après l'analyse de la réponse, mettez un en-tête comme :

X-CSRFToken: "PgQEgY3LAynbVeWRIzXoo2VFRLfd8Uqt" 

dans votre POST avec les informations de login/mot de passe. HTH

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