Лучший способ генерировать ключ API?

Пример использования

Я создаю приложение для iPhone с простой регистрацией и логином.

Когда пользователь регистрируется/регистрируется, я хочу, чтобы сервер Ruby (Sinatra) генерировал/извлекал и возвращал токен доступа для этого пользователя, который клиент iPhone затем может отправлять с каждым последующим запросом с использованием базовой проверки подлинности по протоколу HTTPS.

Я еще не внедряю OAuth 2.0, чтобы сторонние приложения могли получить доступ к серверу. Прямо сейчас, я просто строю простой внутренний API (для своего собственного, стороннего, приложения для iPhone).

Пример

В принципе, я хочу создать секретный ключ API, например Stripe's: https://manage.stripe.com/account/apikeys

Например: sk_test_NMss5Xyp42TnLD9tW9vANWMr

Какой лучший способ сделать это, скажем, в Ruby?

Ответ 1

Ruby stdlib предоставляет целый класс генераторов случайных данных, называемых SecureRandom. Что бы вы ни хотели, вы, вероятно, можете найти его там.

Клавиши Stripe являются по существу безопасными для URL Base64. Вы можете получить что-то очень похожее:

require 'securerandom'

p "sk_test_" + SecureRandom.urlsafe_base64

(Полоса пропускает не буквенно-цифровые символы, но это тривиально делать с gsub, если вы не хотите, чтобы в ваших ключах были дефисы.)