Использование Hashicorp Vault для хранения идентификатора клиента и секрета в потоке паролей OAuth2

Я новичок в Хранилище Hashicorp. Я надеялся защитить свой идентификатор и секрет клиента для потока паролей OAuth2 с помощью Hashicorp Vault. Каждый раз, когда вызывается мой серверный REST API, ему требуются идентификатор и секрет клиента, а также учетные данные пользователя: имя пользователя и пароль. Как мне сделать это безопасным способом и позволить моему приложению передать это, не раскрывая это в моем клиенте javascript?

Спасибо.

Джон


person John Stafford    schedule 24.12.2016    source источник


Ответы (1)


Если я правильно прочитал ваш вопрос, у вас есть приложение Javascript, которое вызывает вашу собственную серверную службу (REST). Этот вызов защищен с помощью идентификатора клиента, секрета клиента, имени пользователя и пароля. Это поднимает пару вопросов:

идентификатор и секрет клиента, а также учетные данные пользователя: имя пользователя и пароль

Это кажется неправильным подходом: ресурс, защищенный OAuth (ваша серверная служба REST), не должен требовать имя пользователя и пароль. Вход пользователя осуществляется на сервере авторизации.

Попробуйте начать с прочтения спецификации OAuth2 (RFC 6749) или руководство по DigitalOcean, чтобы получить исчерпывающий обзор.

Как мне сделать это безопасным способом и позволить моему приложению передать это, не раскрывая это в моем клиенте javascript?

Вы не можете: секреты клиента не могут быть защищены в приложении, управляемом клиентом, потому что злой клиент может перепроектировать ваше приложение (или прочитать ваш javascript). То, что у вас есть, называется «публичный клиент», то есть клиент, который не может хранить свою тайну в тайне. В этом случае вы не используете секреты клиента. Попробуйте начать с этого вопроса или введение в типы клиентов oauth2.

person Jakob Buis    schedule 25.12.2016
comment
Привет Якоб. Спасибо. Это имеет большой смысл. Да, это общедоступный клиент с потоком предоставления пароля. Итак, я думаю, что единственная аутентификация, которая мне понадобится, — это пользователь со своим именем пользователя и паролем на сервере авторизации. Я сохраню идентификатор клиента, например пароль-грант-клиент и пароль. Нет необходимости хранить пароль на этом общедоступном клиенте. Вы согласны? - person John Stafford; 26.12.2016