Является ли токен доступа к пледу секретом?
Документация API Plaid Link гласит, что результат успешной ссылки Plaid возвращает public_token
со следующими свойствами:
Как только пользователь успешно загрузится через Plaid Link, модуль предоставит public_token. Это в отличие от типичных запросов API Plaid, которые возвращают access_token.
Безопасно выставить в приложении или браузере
Не может использоваться для непосредственного получения номеров счетов и маршрутизации (для аутентификации) или транзакций (для соединения)
Можно обменять на Plaid access_token через конечную точку /exchange_token.
Предположительно, это в отличие от access_token
, что подразумевает, что access_token
это секрет. Однако, насколько я могу судить, каждая конечная точка пледа, которая принимает access_token
также требует идентификатор клиента и secret
значение.
Предполагая, что secret
на самом деле держится в секрете, теоретически безопасно выставлять токены доступа? Если нет, то что мне не хватает? Если да, то в чем смысл публичных токенов?
1 ответ
Ваше предположение верно, access_token
должен храниться в секрете.
Единственная причина выставить access_token
либо показывать эту информацию пользователю (нет причин делать это), либо предоставлять клиенту информацию, чтобы он мог отправить ее позже (например, с помощью токена OAuth для аутентификации).
Но если вы выставите access_token
это означает, что ваш API ожидает, что пользователь отправит свой собственный токен доступа при запросе информации. Ваш API доверяет этому пользовательскому вводу. Если пользователь получает доступ к другому пользователю access_token
они могут отправить это в ваш API и получить доступ к учетной записи другого пользователя.
Чтобы защититься от такого несанкционированного доступа, вам нужно отследить, какой пользователь имеет доступ к каким токенам, и вы должны проверять это при каждом запросе, чтобы гарантировать отсутствие несанкционированного доступа.
И в этот момент вы должны спросить себя, зачем выставлять access_token
на первом месте? Идентификатор клиента является публичной информацией, поэтому вы полагаетесь на тот факт, что ваш secret
не будет выставлен И если ваш секрет когда-либо раскрывается и ваш access_tokens
уже обрабатываются как общедоступные, тогда информация о банке для всех пользователей будет открыта.
Для обеспечения максимальной безопасности ваших пользовательских данных, access_token
никогда не следует давать конечному пользователю.