Создание маркеров API с использованием node

Я пишу приложение, которое будет выставлять API. Приложение позволяет людям создавать рабочие пространства и добавлять к ним пользователей. Каждый пользователь будет иметь уникальный токен. Когда они вызывают вызов API, они будут использовать этот токен (который будет идентифицировать их как пользователя, использующего это рабочее пространство.

В данный момент я делаю это:

var w = new Workspace(); // This is a mongoose model
w.name = req.body.workspace;
w.activeFlag = true;
crypto.randomBytes(16, function(err, buf) {
    if(err){
        next(new g.errors.BadError503("Could not generate token") );
    } else {
        var token = buf.toString('hex');

        // Access is the list of users who can access it. NOTE that
        // the token is all they will pass when they use the API
        w.access = {  login: req.session.login, token:token, isOwner: true };
        w.save( function(err){
            if(err){
                next(new g.errors.BadError503("Database error saving workspace") );

Это хороший способ генерации токенов API?

Поскольку токен - это имя + рабочее пространство, возможно, мне нужно сделать что-то вроде md5 (имя пользователя + рабочая область + secret_string)...?

Ответы

Ответ 1

Если вы используете mongodb, просто используйте ObjectId, в противном случае я рекомендую использовать модуль hat.

Для создания id просто, как

var hat = require('hat');

var id = hat();
console.log(id); // 1c24171393dc5de04ffcb21f1182ab28

Ответ 2

Как этот код удостоверяется, что ваш токен уникален? Я считаю, что у вас может быть столкновение чисел с этим кодом. Я считаю, что вам нужно иметь такой порядковый номер, как в этой фиксации из socket.io.

Также вы можете использовать проекты npm, например, например:

чтобы обеспечить уникальность.

Ответ 3

Почему бы просто не использовать UUIDv4, если вы ищете что-то уникальное? Если вас интересует какой-то другой тип хэширования (как упоминалось ранее, шляпа - хороший выбор), вы можете посмотреть на speakeasy - https://github.com/markbao/speakeasy. Он не только генерирует случайные ключи, но также может создавать двухфакторные ключи аутентификации на основе времени, если вы действительно хотите сложить дополнительную силу безопасности.

Ответ 4

Я думаю, что лучшее решение для создания маркеров API

  • JWT (токен Json)
  • Speakeasy - это генерирует токен на основе двухфакторной аутентификации, основанной на времени, например, аутентификатор google

Speakeasy более безопасен, потому что этот ключ доступен только в течение небольшого периода времени (например, 30 секунд)