2015-10-05 6 views
0

Я использую jwt-simple для создания ключа api. В основном, это encode(secret+data) и отправляет его с просьбой. Я знаю, что сервер будет decode(encode(secret+data)) и убедитесь, что он является действительным запросом. Пример кода найден в jwt-simpledocumentation:Проверка подлинности API с помощью json web tokens jwt-simple

var jwt = require('jwt-simple'); 
var payload = { foo: 'bar' }; 
var secret = 'xxx'; 

// encode 
var token = jwt.encode(payload, secret); 

// decode 
var decoded = jwt.decode(token, secret); 
console.log(decoded); //=> { foo: 'bar' } 

Мои вопросы:

  • Не будет ли кто-то сможет получить доступ к API, если они знают, что маркер, порожденную encode(data+key)? Поэтому я должен использовать HTTPS через HTTP?
  • Думаю, мне нужно хранить секрет каждого пользователя на сервере, так как он понадобится для декодирования. Где я должен хранить его, если я не прав?
  • Как отправить несколько запросов API? Есть ли лучший способ, кроме отправки ключа API для каждого запроса?

Заранее спасибо.

+1

Вы не должны посылать ключ никому. Вы отправляете только сгенерированный токен (из которого вы не можете угадать ключ), и вы возвращаете этот токен. Затем вы используете свой ключ, чтобы убедиться, что этот токен был сгенерирован вами с помощью этого ключа и не был изменен. Также вам нужен один ключ для каждого эмитента, а не для пользователя. – masimplo

ответ

1

Посмотреть этот пост по поводу вашей путаницы с секретом: Can anybody decode a JSON Web Token (JWT) without a secret key?

Что касается ваших вопросов:

  1. Да, все, кто каким-то образом удается получить действительный маркер, может получить доступ к вашей API. Поэтому, если кто-то знает секретный ключ, который вы используете для подписания ваших токенов, и можете создать допустимую полезную нагрузку, он может использовать API. Но обычным потоком будет: пользователь входит в систему, вы проверяете пароль, если это правильный пароль, который вы даете ему действительный токен. Если кто-то схватит этот токен с этого компьютера пользователей, вы не можете сделать это. Но вы можете сделать токены истекают, поэтому, если кто-то крадет один, он недействителен очень долго.

  2. Вы можете подписывать свои жетоны с тем же самым приложением, но вы будете использовать какую-то уникальную полезную нагрузку для пользователя, чтобы каждый пользователь получал другой токен.

  3. В простом решении вы просто отправите токен с каждым вызовом, который вы делаете в API (помимо входа и регистрации). Существуют и другие решения при создании сессий, но я думаю, что их немного сложнее реализовать.

Смежные вопросы