«Я ничего не говорю, я кладу в хранилище, я запираю хранилище. Это хранилище! " —Сейнфельд

Что ж, мы думали, что дали вам способ хранить секреты лучше, чем Джордж или Элейн, но оказалось, что - в некоторых случаях - комбинация хранилища была напечатана на ручке.

TL; DR. Мы устранили источник потенциальной утечки токенов npm. Если вы профессиональный клиент, который использует npm, вы можете перейти в сервисы учетной записи, чтобы восстановить новый токен npm, а затем перенастроить npm.

Теперь, что такое Font Awesome Pro, токен npm, влияние утечки токена - и как мы можем заблокировать это хранилище раз и навсегда?

Использование NPM с Font Awesome Pro

Font Awesome Pro - это еще много хороших вещей поверх уже и без того великолепного Font Awesome Free: гораздо больше значков, больше стилей и - особенно актуально здесь - некоторые дополнительные службы для доступа к этим значкам, включая наш частный реестр npm.

Если вы являетесь клиентом Font Awesome Pro, вы можете настроить свои проекты Node.js для удобной установки значков Pro с помощью npm, как и остальные ваши пакеты. Вам просто нужно настроить npm для использования нашего частного реестра npm, авторизуясь с помощью токена npm, который вы можете получить из своей учетной записи fontawesome.com.

Что делать, если мой токен NPM просочился?

С точки зрения безопасности мы определили, что риск нулевой. Токен npm не дает доступа к вашей учетной записи fontawesome.com. Токены используются только для авторизации запросов к npm.fontawesome.com, который является изолированной службой в нашей инфраструктуре.

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

Просто он может быть использован человеком без лицензии для доступа к Font Awesome Pro. Так что это не конец света, но мы все равно должны его очистить.

Кроме того, хотя мы и называем его токеном npm, это просто потому, что он дает вам доступ к нашему частному реестру npm, но он не имеет ничего общего с вашей учетной записью npmjs.com (если у вас есть один из тех).

Что происходит под капотом

Первоначально способ, которым мы проинструктировали вас настроить npm для нашего частного реестра, заключался в настройке адреса реестра примерно на npm.fontawesome.com/2C116866-AAFB-DEAD-BEEF-0F3F2128F53A, где часть после / заменяется вашим токеном npm.

Проблема в том, что когда npm install запускается и оставляет свой package-lock.json, или когда yarn запускается и оставляет позади свой yarn.lock, он включает этот частный URL-адрес реестра, а поскольку URL-адрес включает токен, ну ... токен находится прямо там, в lock файле. И эти lock файлы обычно возвращаются в ревизию исходного кода, например git, а затем отправляются на сервер репозитория, например GitHub.

Это нормально, если репозиторий git остается закрытым. Наша лицензия Pro дает понять, что вам не разрешено использовать значки Pro в проектах с открытым исходным кодом. Вы можете подумать: пока я соблюдаю правило не добавлять значки Pro в проекты с открытым исходным кодом и, следовательно, не добавлять мой токен npm в проект с открытым исходным кодом, тогда никакие токены npm не попадут в lock файлы на GitHub open исходные проекты. Верно?

Упс

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

Когда вы устанавливаете конфигурацию npm для для каждого пользователя, настройки конфигурации, которые находятся в вашем $HOME/.npmrc, они используются во всех ваших проектах: как частных, так и с открытым исходным кодом!

Предположим, что git repo X является частным. Затем предположим, что вы хотите добавить к нему Font Awesome Pro, поэтому вы добавляете что-то вроде npm.fontawesome.com/2C116866-AAFB-DEAD-BEEF-0F3F2128F53A в качестве частного реестра в your$HOME/.npmrc для любых пакетов в области @fortawesome.

Токен npm попадает в файл theyarn.lock для git repo X и регистрируется в git. Хорошо, потому что пока это все личное.

Но затем предположим, что вы переключаетесь на работу над git repo Y, проектом с открытым исходным кодом. К этому вы добавляете Font Awesome Free, который совершенно здорово использовать в проектах с открытым исходным кодом. Но пакеты Font Awesome Free npm также находятся в @fortawesome области действия npm. Итак, в результате вашей конфигурации для каждого пользователя yarn также разрешит эти бесплатные пакеты через частный реестр npm, используя этот токен, и сохранит все это в файле yarn.lock, который проверяется в git… и перенесен в общедоступный репозиторий GitHub. Ох!

Решение: заголовок авторизации

Как мы можем это решить? Очевидно, мы должны получить этот токен из частного URL-адреса реестра npm. Мы можем сделать это, используя тот же механизм авторизации, который npm и yarn используют после npm login входа в реестр.

Однако вместо фактического запуска npm login мы можем просто записать такие же ключи конфигурации и авторизации в ваш .npmrc и использовать ваш токен npm в качестве токена авторизации.

Итак, просто запустите эти две npm config команды (конечно, используя свой токен):

$ npm config set “@fortawesome:registry” https://npm.fontawesome.com/
$ npm config set “//npm.fontawesome.com/:_authToken” 2C116866-AAFB-DEAD-BEEF-0F3F2128F53A

И вот что попадает в вашу $HOME/.npmrc конфигурацию:

@fortawesome:registry=https://npm.fontawesome.com/
//npm.fontawesome.com/:_authToken=2C116866-AAFB-DEAD-BEEF-0F3F2128F53A

В первой строке задается URL-адрес реестра npm, который будет использоваться для разрешения пакетов в области @fortawesome. Вторая строка настраивает, какой токен авторизации использовать при обращении к этому серверу реестра. Это единственное место, где появится токен npm. А поскольку .npmrc не является файлом, который следует возвращать в систему управления версиями, вы золотые.

Под капотом это просто означает, что когда npm или yarn отправляют запрос к npm.fontawesome.com, они добавят следующий HTTP-заголовок:

Authorization: Bearer 2C116866-AAFB-DEAD-BEEF-0F3F2128F53A

(Да, это фальшивый токен. Вам следует заменить его на свой настоящий.)

Обновление и прекращение поддержки

Мы уже выпустили новую версию нашего частного реестра npm, который ищет заголовок Authorization, поэтому вам следует перейти на него сейчас. Мы отказались от старого способа, поэтому со временем он перестанет работать.

Кроме того, если вы думаете, что ваш токен npm мог просочиться, вы можете просто сгенерировать новый для себя одним нажатием кнопки, а затем перенастроить npm для использования этого механизма авторизации.

** токен npm в этом сообщении относится только к коду, сгенерированному fontawesome.com, который предоставляет клиенту Font Awesome Pro доступ к нашему частному реестру npm. Это не имеет ничего общего с вашей учетной записью npmjs.com, если она у вас есть.