Bonjour,
J'essaie de faire une application qui communique avec ma FreeBox.
Je me base sur la documentation suivante : https://dev.freebox.fr/sdk/os/#
J'arrive plus ou moins à mes fins, au détail près de l'authentification (en gros, pas très loin après mes premiers pas pourtant prometteurs )
Voici toute la logique d'ouverture d'une session authentifiée sur la FreeBox : https://dev.freebox.fr/sdk/os/login/#
J'interroge donc ma FB en REST pour obtenir mon app_token.
Et je dois le combiner au challenge pour générer mon password.
Seulement, je pense que je ne sais pas transformer les chaînes de caractères lues en byte[] pour la classe HMACSHA1 https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx et vice-versa.
En effet, lorsque j'utilise Encoding.UTF8, j'obtiens des caractères bizarres, et quand j'utilise Encoding.ASCII j'obtiens des tas de "?".
Résultat, mon ouverture de session n'aboutit pas...
A votre avis, quand je reçois ça :
Code json : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 { "success": true, "result": { "app_token": "dyNYgfK0Ya6FWGqq83sBHa7TwzWo+pg4fDFUJHShcjVYzTfaRrZzm93p7OTAfH/0", "track_id": 42 } } puis { "success": true, "result" : { "session_token" : "35JYdQSvkcBYK84IFMU7H86clfhS75OzwlQrKlQN1gBch\/Dd62RGzDpgC7YB9jB2", "challenge":"jdGL6CtuJ3Dm7p9nkcIQ8pjB+eLwr4Ya", "permissions": { "downloader": true, } } }
Comment obtenir le password sâchant que la formule est :
Voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 password string The password computed using the challenge and the app_token To compute the password you have to compute the hmac-sha1 of the challenge and the app_token password = hmac-sha1(app_token, challenge)
Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 private string AppToken { get; set; } private string AuthChallenge { get; set; } private byte[] AppTokenBytes { get { return Encoding.UTF8.GetBytes(AppToken); } } private byte[] AuthChallengeBytes { get { return Encoding.UTF8.GetBytes(AuthChallenge); } } private string AuthPassword { get { return Encoding.UTF8.GetString(AuthPasswordBytes); } } private byte[] AuthPasswordBytes { get { byte[] password; using (HMACSHA1 hmac = new HMACSHA1(AppTokenBytes)) { password = hmac.ComputeHash(AuthChallengeBytes); } return password; } }
AppToken et AuthChallenge sont initialisés avec les valeurs reçues des précédentes requêtes.
Partager