Получение Chrome Extension ID для разработки

Хотя это похоже на этот вопрос, я не спрашиваю:

При каких условиях меняется идентификатор добавочного номера?

ни

Как я могу загрузить свой zip-архив на Chrome Dashboard?

Однако я спрашиваю, как получить ключ расширения без использования Chrome Dashboard. Поэтому я не считаю это дубликатом этого ТАКОГО вопроса.

В документации по использованию Google Identity внутри расширения Chrome говорится о необходимости скопировать ключ расширения в его файл манифеста.

Чтобы сохранить идентификатор приложения постоянным, вам необходимо скопировать ключ из установленного manifest.json в исходный манифест.

Однако при переходе в рекомендуемый каталог (...Google/Chrome/Default/Extensions) Я не вижу идентификатор моего распакованного расширения. Я понимаю, что это потому, что расширение не было установлено как файл.crx. Тем не менее, документация четко написана для целей разработки:

Скопируйте ключ в установленном manifest.json в исходный манифест, чтобы идентификатор приложения оставался постоянным во время разработки.

Как я могу избежать упаковки своего расширения и переустановки каждый раз, когда я делаю изменения? Если у моего расширения разработки нет установленного файла манифеста, из которого я могу получить ключ расширения, откуда я могу его получить?

4 ответа

Решение

Самый простой способ получить идентификатор расширения - это сгенерировать .pem файл и извлеките идентификатор расширения, используя шаги, описанные в этом ответе (прочитайте часть ниже изображения).

Если вы хотите сгенерировать идентификатор расширения только с помощью инструментов командной строки, посмотрите дальше. Я собираюсь использовать OpenSSL, потому что он кроссплатформенный.

Сначала мы генерируем закрытый ключ. Держите этот секретный ключ в секрете и не теряйте его. В противном случае вы не сможете создать файл CRX с тем же идентификатором расширения. На момент написания закрытыми ключами, сгенерированными Chrome, были 2048-битные ключи RSA в формате PKCS #8 ( 1024-битные до 2013 года). В ответе я буду ссылаться на этот файл закрытого ключа как key.pemпотому что Chrome Web Store ожидает, что закрытый ключ называетсяkey.pem,

Во-вторых, я покажу, как создать значение для "key" поле файла манифеста. Это просто открытый ключ, закодированный в формате base64.

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

Linux / Mac

OpenSSL устанавливается в большинстве дистрибутивов Linux. Если нет, просто установите openssl через ваш любимый менеджер пакетов.

# Create private key called key.pem
2>/dev/null openssl genrsa 2048 | openssl pkcs8 -topk8 -nocrypt -out key.pem

# Generate string to be used as "key" in manifest.json (outputs to stdout)
2>/dev/null openssl rsa -in key.pem -pubout -outform DER | openssl base64 -A

# Calculate extension ID (outputs to stdout)
2>/dev/null openssl rsa -in key.pem -pubout -outform DER |  shasum -a 256 | head -c32 | tr 0-9a-f a-p

Я положил 2>/dev/null в начале каждой строки, чтобы предотвратить вывод "записи ключа RSA" на консоль.

Windows

Если у вас нет OpenSSL, вы можете получить предварительно скомпилированный двоичный файл из этого зеркала.

@echo off
:: Assuming that you have installed OpenSSL in this directory
SET PATH=%PATH%;C:\OpenSSL-Win32\bin

:: Create private key called key.pem
2>NUL openssl genrsa -out priv.tmp 2048
2>NUL openssl pkcs8 -topk8 -in priv.tmp -nocrypt -out key.pem
del priv.tmp

:: Generate string to be used as "key" in manifest.json
2>NUL openssl rsa -in key.pem -pubout -outform DER -out pub.tmp
2>NUL openssl base64 -A -in pub.tmp
del pub.tmp

:: Calculate extension ID
2>NUL openssl rsa -in key.pem -pubout -outform DER -out pub.tmp
2>NUL openssl dgst -sha256 -out checksum.tmp pub.tmp
SET /p EXTID=<checksum.tmp
SET EXTID=%EXTID:* =%
SET EXTID=%EXTID:~0,32%
SET EXTID=%EXTID:f=p%
SET EXTID=%EXTID:e=o%
SET EXTID=%EXTID:d=n%
SET EXTID=%EXTID:c=m%
SET EXTID=%EXTID:b=l%
SET EXTID=%EXTID:a=k%
SET EXTID=%EXTID:9=j%
SET EXTID=%EXTID:8=i%
SET EXTID=%EXTID:7=h%
SET EXTID=%EXTID:6=g%
SET EXTID=%EXTID:5=f%
SET EXTID=%EXTID:4=e%
SET EXTID=%EXTID:3=d%
SET EXTID=%EXTID:2=c%
SET EXTID=%EXTID:1=b%
SET EXTID=%EXTID:0=a%
echo %EXTID%
del checksum.tmp pub.tmp

@echo on

Я положил 2>NUL в начале каждой строки с openssl Команда, чтобы скрыть безвредное предупреждение о отсутствующем конфигурационном файле.

Примеры

Вот пример запуска предыдущих команд в Linux. Соответствующий вывод команд выделен жирным шрифтом. Первая команда создает файл, поэтому в оболочке нет видимых выходных данных. Обратите внимание, что выходные данные второй и третьей команды не заканчиваются переводом строки, поэтому в конце строки стоит "$" (который не должен копироваться).

$ # Создать закрытый ключ с именем key.pem
$ 2>/dev/null openssl genrsa 2048 | openssl pkcs8 -topk8 -nocrypt -out key.pem
$ # Создать строку, которая будет использоваться в качестве "ключа" в manifest.json (выводится в стандартный вывод)
$ 2> / dev / null openssl rsa -in key.pem -pubout -outform DER | openssl base64 -AMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8vj7SK0NZ6ak7K6m6KEAkfGaNfKUahqFFms6W8rq + voaW7nETrpsMqNyhmBQ + ea0KkyI / S5XIrDQPqDcNpvesYlg9lsmi7CQBZjJw7zNqKkvn0oYaP4SNtWZfZopBumqFbzFi5cst2PT + XU9CBitxXNtocRtcjOsa44W1gPA5xanmtlF258N6Nann + rSOAdhIWqSo / J6fj72cxTNfmqLkwAvhdS4Zyux4F87vxp4YTSwElfYXFsHZWi7h66uuuMzqyOyJz5grhCJ24rtTshMQUCxQWyhO2XT2J1tVfUN1YVw6xdKUz3aGyKZeXCuql5klHmlqE9PTlbKj / 1VMiIgCQIDAQAB$ 
$ # Рассчитать ID расширения (выводит на стандартный вывод)
$ 2>/dev/null openssl rsa -in key.pem -pubout -outform DER | sha256sum | голова -c32 | tr 0-9a-f apmfabfdnimhipcapcioneheloaehhoggk$ 
$ cat key.pem # Показать содержимое key.pem для полноты этой демонстрации
----- НАЧАТЬ ЧАСТНЫЙ КЛЮЧ -----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDy+PtIrQ1npqTs
rqbooQCR8Zo18pRqGoUWazpbyur6+hpbucROumwyo3KGYFD55rQqTIj9LlcisNA+
oNw2m96xiWD2WyaLsJAFmMnDvM2oqS+fShho/hI21Zl9mikG6aoVvMWLlyy3Y9P5
dT0IGK3Fc22hxG1yM6xrjhbWA8DnFqea2UXbnw3o1qef6tI4B2EhapKj8np+PvZz
FM1+aouTAC+F1LhnK7HgXzu/GnhhNLASV9hcWwdlaLuHrq664zOrI7InPmCuEInb
iu1OyExBQLFBbKE7ZdPYnW1V9Q3VhXDrF0pTPdobIpl5cK6qXmSUeaWoT09OVsqP
/VUyIiAJAgMBAAECggEAIztFPKmTOwdn/MXqf+rwqTjuUopFSQllaPXNdYf8AL6J
Wema9IuFquYWcjO/Ki1wzH1ik8vHaMlYuOwcYnLBnN69x5s6AKFukNEx2IclDyLR
О /jDh13oCDl600KqVk1Fk3dW8cHPAxyfnRmJ6wWhFPOC3yUbdabWhpYI66mJrDhN
ZpN04RmH7DIlhlBpvq/OMVodhRtqb4/EVJYghTxUsrsv/I+3t3zl/ о /c0DiOjiVZ
pEBYzn0rrHP8BAEhJWagGNgvotHPaVKAjoYcUiOUtMM4P1Js034XKjP4MHE1pMbN
VlVnQMz3/6CXFL+wU1QqfohdChmcnc4QwM+vCFK47QKBgQD/FjHxhCJco0rNqNua
B0inGx2Jfb4b+FWwLyNobaYey11o0MjpkpAvYcfe3zW8DQtmepDxGL8CpORoWtFg
sVnmhAir0I6bxdZLMwKcp4T+kHW3n/ae3z8tPvMvclCnARGEp+ccyDH9X2iyaSd5
8DeJ6ND32+ год +vLgyyK/JW1z5wKBgQDz167cLe+xoRUqlKdJq8lzmij30lGVUT2D
5ФНО +2YUKIMeVEM7PlEmu9UmpN5HMA+LSNeiMZ1uhW5YQovXlXZCWoRqieeI4LMoM
M335hsAWpS8pFRdlXMy885w5FUC5v4Ji0RUI37WON6fxNd8zFVqAMOcAANg716RI
MWfblCJOjwKBgQDV8BKBIbYEBfv10poja9p2NFqodqpcIQIU2uQScGvzxdIY14q5
wu9kndiYxpH1nuch0sf/PSbuG8do8kpKk1P37mKrXyZL5TgeJ7EYG7OCITxpfiLE
Ci6dTv98mp6kAlRj8sH1tL2gaEWR5Hl0XpDl/DpOtsefUcAj4prIv6Y1nwKBgGUk
obNSmonjdxQidQFp8DWzTCr/Yje9ava6UVoUf8qjriV2w1H3AFlCBTvbgO5O7laj
ZcJXXPqhMq3T6ospNEBGsvWR+PO0IFrPQQGvkx3Rhq5TwVCaHZKCudozppVlin/S
mhcENBq5mz/CSMK3qMJjhm3J6+dmmw4W8C10VIahAoGARf4zus0TQIxRlix1Oaaz
sM5yANLcLivoeJDVOlUFUWgeSUc6Yma8T/FYlAkEVyyK+/nCWNErTS2yOzXEff01
n8F0h1DJ4K5zxt0OhGUIUAGgR/kqpub0omqTJcJndLv2qgzofwK21Uih6yQzDeus
lJsf3m3tuax5kcmhnDojbtE=
----- КОНЕЦ ЧАСТНОГО КЛЮЧА -----

Самый простой способ, который я нашел, - это упаковать расширение chrome в режим разработки.

Чтобы упаковать расширение:

Откройте страницу управления расширениями, перейдя по этому URL: chrome: // extensions

Убедитесь, что флажок "Режим разработчика" в правом верхнем углу установлен. Нажмите кнопку расширения пакета. Диалог появляется.

В поле корневого каталога расширения укажите путь к папке расширения, например: ~/mytodosextension, (Не обращайте внимания на другое поле; вы не указываете файл закрытого ключа при первой упаковке определенного расширения.)

Нажмите Пакет. Упаковщик создает два файла:

  • файл.crx, который является фактическим расширением, которое можно установить,

  • и файл.pem, который содержит закрытый ключ.

Смотрите документацию Chrome здесь

Идентификатор распакованного расширения Chrome генерируется на основе пути к его каталогу. Для распакованного расширения вы можете сгенерировать идентификатор следующим образом (код на Python):

import hashlib

m = hashlib.sha256()
m.update(bytes(PATH.encode('utf-8')))
EXTID = ''.join([chr(int(i, base=16) + ord('a')) for i in m.hexdigest()][:32])

где PATH - это нормализованный путь к расширению, т. е.:

PATH = os.path.dirname(os.path.realpath(__file__))

Немного обновления из ответа yakxxx. По какой-то причине Chrome изменил путь, по которому генерируется идентификатор расширения.

Я не знаю, влияет ли это на другие ОС, кроме MacOS, но если у вас возникла проблема, проверьте, какой адрес использует Chrome, когда вы открываете панель настроек расширения. Кажется, они добавили /private/ к исходному пути. Здесь генерируется хеш-значение.

У нас есть тестирование расширений как часть нашей CI, поэтому это небольшое обновление сломало нашу систему.

Другие вопросы по тегам