Bonjour,
J'ai une petite question je voulais crée une petit API Json qui dialogue en type Server To Server ...
Info : je suis en https sur les deux serveurs.
pour la sécurité je passe 2 variable (api_key et api_secret) dans mon json :
{"api_key":"xxxxxxxxxxxxxxxxxxxxxxx","api_secret":"xxxxxxxxxxxxxxxxxxxxxxx","data":"blablabla"}
Dans mon Controller je transform mon json en Array je verifi que la key et le secret sont bon en base de donnée, et apres je les enleves du tablaux et je traite la Data ...
Je verifie aussi l'IP qui envoie la request...
Vous pensez que ça suffie ? ou alors un Basic Auth c'est mieux?
Théoriquement, pour garder la méthode de keulu, tu es sensé envoyer 3 données + tes datas
1- ta clé public
2- un hash "secret + nonce" < ton hash est donc tjrs différent
3- nonce
(nonce = valeur à usage unique, donc aussi bien un uniqid() qu'un time() etc. à toi de voir).
Reste plus qu'à recup le "secret" avec la clé public, et de faire un hash avec le nonce, si le hash est égal, c'est good.
le principe de la clé et du secret, c'est que le secret n'est jamais envoyé... c'est secret (comme son nom l'indique)
dans ton application coté client et coté serveur tu connais le secret. et tu envoie la key. mais tu n'evoie pas vraiment la key. en fait tu envoi un hash (md5, sha1, aes ou autre) de key + secret
{"api_key":"xxxxxxxxxxxxxxxxxxxxxxx","hash":md5(key + secret),"data":"blablabla"}
et coté serveur, tu récupères l'organisation/l'utilisateur via le api_key et tu reconstruit le meme hash coté serveur et tu compare a ce qui t'as été envoyé. si c'est bon, c'est qu'ils se partagent le meme secret, sinon, ben c'est qu'un petit malin essaye de tricher mais ne connait pas le secret.
ce sera beaucoup plus sécurisé.
Interessant... mais si j'envoie directement le secret ou le hash ... c'est identique non?
exemple que j'envoie le secret (return true):
{"api_key":"xxxxxxxxxxxxxxxxxxxxxxx","api_secret":"AAAAAAAAAAAAAA","data":"blablabla"}
ou alors un hash (return true)
{"api_key":"xxxxxxxxxxxxxxxxxxxxxxx","hash":"BBBBBBBBBBBBBB","data":"blablabla"}
quoi qu'il arrive j'envoie le secret ou le hash dans le json ... et si il est bon il aura l'autorisation, donc que je hash 1 fois ou 30 fois le password ça reviendra au meme non?
a la base je me demandais a cause du Basic Auth ou tu envoie le login/password dans la request en claire.
c'est pas faux... le hash prend son interet si il est tournant (CAD que tu n'envoie jamais 2 fois le meme hash)
Désolé, j'ai dit de la crotte ^^
sinon pour plus de sécurité, tu as les JWT. JSON Web Tokens. le gros avantage du JWT, c'est que tu peux le décoder et donc enbarquer des informations dedans comme l'utilisateur ID, son email, ses droits, une durée de validitée etc...