Как службы генерируют и используют открытые и секретные ключи API? - PullRequest
0 голосов
/ 05 марта 2019

Google, Stripe и многие другие компании имеют открытый ключ API и секретный ключ API.

Легко генерировать случайные строки, но у меня вопрос: как я могу генерировать открытый и секретный ключи, хранить их и правильно их использовать?

Публичный ключ API должен сообщить, кто пользователь, а секрет - подтвердить его личность.

Мой поток выглядит следующим образом: - Пользователь создает аккаунт - Пользователь активирует услугу (собственноручно) - Служба возвращает открытый и секретный ключ API (UARRHAtPtJcLxx5RmMWo9oTrca4gRt2k, C9YS7Mhzichq2vqBuRkNJxkNci5W2Xua) - Пользователь использует открытый ключ на своем веб-сайте и закрытый ключ на стороне сервера

Я использую nodejs, и открытый ключ генерируется по требованию, когда пользователь запрашивает ключ API:

let public = await crypto.randomBytes(32).toString('base64');

Хранение секрета в базе данных было бы похоже на хранение пароля в виде открытого текста. Я предполагаю, что мы не хотим этого, и это нужно как-то хешировать. Я генерирую «закрытый» ключ и хеширую его, например, используя argon2? Пользователь больше никогда не сможет увидеть свой ключ и ему нужно будет сразу его сохранить, это хорошая практика?

Я не смог найти много информации о том, как это должно работать.

...