Инструмент для обновления подписки E5 путем вызова API MSGraph
Создать приложение
См. Зарегистрированное приложение и настройка разрешений для получения дополнительной информации. Нам нужен tenant id , client id и client secret вашего приложения для доступа к APIS MSGraph.
Создать файл секрета пользователя
Скопируйте user-secret.json.example to user-secret.json , отредактируйте его в качестве вашей потребности. Вы всегда можете добавить больше учетных данных.
Если вы хотите вместо этого использовать сертификат, который лучше для безопасности, вы можете написать ключ certificate с Path в файл сертификата вместо secret ключа. Если мы обнаружим, что вы установите certificate , он всегда будет использоваться вместо secret .
Если вы добавите сертификат после созданного приложения и добавленного секрета, client_id может быть изменен, поэтому, пожалуйста, обновите его.
Использование формата PFX для этого инструмента протестируется. Но вам нужно только загрузить часть открытого ключа (*. CRT) в Azure.
Если в вашем сертификате есть пароль, вы можете создать ключ passwords в файле секрета пользователя, как это:
{
"passwords" : {
"<sha512sum>" : " <password> "
}
} <sha512sum> - это сумма SHA512 файла сертификата в нижнем случае, а <password> - это его пароль , пожалуйста, сохраните конфигурацию в секрете, чтобы кто -то использовал ваш сертификат без разрешения.
Дни установки необходимы, чтобы быть осторожными, так как это означает, что DayOfWeek в программе, проверьте здесь, чтобы узнать его правильное значение.
Кончик
На данный момент мы поддерживаем форматы JSON, YAML и TOML, хотя мы используем JSON в качестве примера, вы всегда можете использовать другие форматы. Форматы, поддерживаемые нами, могут быть даже расширены с помощью модулей
Установить .NET
Смотрите здесь для получения дополнительной информации, нам нужно .NET 8 и позже.
Получить программу
Вы можете скачать или создать, чтобы получить двоичные файлы.
Запустить программу
Просто запустите ./E5Renewer в папке Binary с необходимыми аргументами.
Вот поддерживаемые аргументы:
--systemd : Если запускается в системной среде, большую часть времени вам не нужно.--user-secret : путь к секретному файлу пользователя.--token : строка, чтобы получить доступ к JSON API.--token-file : файл, которая первой строки используется в качестве токена.--listen-unix-socket-permission : разрешение на сокет домена Unix. По умолчанию мы прослушаем в конечной точке http://127.0.0.1:5000 , это значение ядра ASP.NET по умолчанию.
Поддержка ядра ASP.NET -параметр --urls для установки настраиваемой конечной точки прослушивания, такой как --urls=http://127.0.0.1:5001 или --urls=http://unix:/path/to/socket . Разрешение файла домена Unix может быть настроено с аргументом --listen-unix-socket-permission .
Эти настраиваемые аргументы на самом деле являются элементами конфигурации ядра ASP.NET, имена элементов являются титлеказой аргументов. Например, --token будет сопоставлен с Token , --user-secret будет сопоставлен с UserSecret , а-промежуточная промежутка-в --listen-unix-socket-permission для ListenUnixSocketPermission . С помощью этой карты преобразования вы можете использовать способы их предоставления ASP.NET, такие как конфигурация JSON, переменная среды и т. Д. Но есть особый случай: --systemd должен быть предоставлен Systemd=true если вы не используете аргумент командной линии, так как конфигурация Core ASP.NET требует значения, мы добавили специальную проверку для флага --systemd . Эти индивидуальные аргументы не имеют коротких форм, таких как -s , -u .
--user-secret должен быть предоставлен с помощью любого метода для обеспечения значения конфигурации ядра ASP.NET, или NullReferenceException of userSecret будет Thown.
Примечание
Если указаны оба --token и --token-file , мы предпочитаем --token . Если вы забудете ни один из них, мы используем случайно сгенерированное значение. Вы можете узнать его в выводе журнала после отправки любого запроса в программу и выполнения ошибки аутентификации.
Важный
Если вы хотите установить разрешение Unix Socket, вы должны написать его фактическое значение вместо октального формата. Например, требуется использование 511 вместо 777 .
Run dotnet publish -c Release , и вы можете получить бинарник по адресу E5Renewer/bin/Release/net8.0/publish
Используя curl или любой инструмент, который может отправлять HTTP -запрос, отправьте запрос на конечные точки, такие как http://127.0.0.1:5000 или Unix Socket /path/to/socket , каждый запрос должен быть отправлен с Authorization: Bearer <auth_token> . Вы получите ответ JSON, если все в порядке. Если это запрос GET, отправьте Milisecond TimeStamp в timestamp Param, если это запрос сообщения, отправьте Milisecond TimeStamp в Post JSON с ключевой timestamp и преобразуйте его в строку. Большую часть времени мы вернем JSON вместо простого текста, но вам нужно проверить код ответа, чтобы увидеть, является ли запрос успехи. Если вы используете HTTPS, просто отправьте запрос HTTPS вместо этого.
Например:
curl -H 'Authorization: Bearer <auth_token>' -H 'Accept: application/json'
'http://127.0.0.1:5000/v1/list_apis?timestamp=<timestamp>' | jq '.'
{
"method": "list_apis",
"args": {},
"result": [
"AgreementAcceptances.Get",
"Admin.Get",
"Agreements.Get",
"AppCatalogs.Get",
"ApplicationTemplates.Get",
"Applications.Get",
"AuditLogs.Get",
"AuthenticationMethodConfigurations.Get",
"AuthenticationMethodsPolicy.Get",
"CertificateBasedAuthConfiguration.Get",
"Chats.Get", "Communications.Get",
"Compliance.Get",
"Connections.Get",
"Contacts.Get",
"DataPolicyOperations.Get",
"DeviceAppManagement.Get",
"DeviceManagement.Get",
"Devices.Get",
"Direcory.Get",
"DirectoryObjects.Get",
"DirectoryRoleTemplates.Get",
"DirectoryRoles.Get",
"DomainDnsRecords.Get",
"Domains.Get",
"Drives.Get",
"Education.Get",
"EmployeeExperience.Get",
"External.Get",
"FilterOperators.Get",
"Functions.Get",
"GroupLifecyclePolicies.Get",
"GroupSettingTemplates.Get",
"GroupSetings.Get",
"Groups.Get",
"Identity.Get",
"IdentityGovernance.Get",
"IdentityProtection.Get",
"IdentityProviders.Get",
"InfomationProtecion.Get",
"Invitations.Get",
"OAuth2PermissionGrants.Get",
"Organization.Get",
"PermissionGrants.Get",
"Places.Count.Get",
"Places.GraphRoom.Get",
"Planner.Get",
"Policies.Get",
"Print.Get",
"Privacy.Get",
"Reports.Get",
"RoleManagement.Get",
"SchemaExtensions.Get",
"ScopedRoleMemberships.Get",
"Search.Get",
"Security.Get",
"ServicePrincipals.Get",
"Shares.Get",
"Sites.Get",
"Solutions.Get",
"SubscribedSkus.Get",
"Subscriptions.Get",
"Teams.Get",
"TeamsTemplates.Get",
"Teamwork.Get",
"TenantRelationships.Get",
"Users.Get"
],
"timestamp": "<timestamp_returned_by_server>"
}
Сервер примет запрос только менее чем на 30 секунд старше, чем время сервера.
См. Http-api.md для возможных API
Мы создали модульную систему для расширения программы, вы можете проверить Modules.md для получения дополнительной информации.