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 :
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)
Voici mon code :
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.