rest, token, hmac, password et bytes[]
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 :D)
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:
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:
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:
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.