Uma ferramenta para renovar a assinatura do E5 chamando APIs do Primeiro
Criar aplicativo
Consulte o aplicativo Registrar e configurar permissões para obter mais informações. Precisamos tenant id , client id e client secret do seu aplicativo para acessar as APIs do MSGRAPH.
Crie arquivo de segredos do usuário
Copie user-secret.json.example para user-secret.json , edite-o como sua necessidade. Você sempre pode adicionar mais credenciais.
Se você deseja usar o certificado em segredo, o que é melhor para segurança, pode escrever uma chave certificate com o caminho para o seu arquivo de certificado em vez da chave secret . Se encontrarmos certificate definido, ele sempre será usado em secret .
Se você adicionar certificado após o aplicativo criado e adicionado segredo, o client_id poderá ser alterado, portanto, atualize -o.
Usando o formato PFX para esta ferramenta é testado. Mas você só precisa fazer upload da parte da chave pública (*. CRT) para o Azure.
Se o seu certificado tiver uma senha, você poderá criar uma chave passwords no arquivo secreto do usuário como este:
{
"passwords" : {
"<sha512sum>" : " <password> "
}
} <sha512sum> é a soma sha512 do arquivo de certificado em minúsculas e <password> é sua senha na planície , mantenha a configuração em segredo para evitar que alguém use seu certificado sem ser permitido.
É necessário que os dias de definição sejam cautelosos, pois significa DayOfWeek no programa, verifique aqui para descobrir seu valor correto.
Dica
Apoiamos os formatos JSON, YAML e TOML por enquanto, embora usamos o JSON como exemplo, você sempre pode usar outros formatos. Os formatos suportados por nós podem até ser estendidos usando módulos
Instale .NET
Veja aqui para obter mais informações, precisamos do .NET 8 e mais tarde.
Obter programa
Você pode baixar ou criar para obter arquivos binários.
Programa de execução
Simplesmente execute ./E5Renewer na pasta de binários com argumentos necessários.
Aqui estão os argumentos suportados:
--systemd : se executar no ambiente Systemd, na maioria das vezes você não deve precisar.--user-secret : o caminho para o arquivo secreto do usuário.--token : a string para acessar a API JSON.--token-file : O arquivo cuja primeira linha é usada como token.--listen-unix-socket-permission : a permissão para o arquivo de soquete do UNIX Domain. Ouviremos no endpoint http://127.0.0.1:5000 Por padrão, esse é o valor padrão do CORE ASP.NET.
O parâmetro ASP.Net Core suporta --urls para definir o Lister EndPoint personalizado, como --urls=http://127.0.0.1:5001 ou --urls=http://unix:/path/to/socket . A permissão do arquivo de soquete de domínio do UNIX pode ser personalizada com o argumento --listen-unix-socket-permission .
Esses argumentos personalizados são na verdade itens de configuração do núcleo do ASP.NET, os nomes dos itens são a titleCase de argumentos. Por exemplo, --token será mapeado para Token , --user-secret será mapeado para o UserSecret e --listen-unix-socket-permission será mapeado para ListenUnixSocketPermission . Com este mapa de conversão, você pode usar as maneiras do ASP.NET Core de fornecer -lhes, como configuração JSON, variável de ambiente, etc. Mas há um caso especial: --systemd deve ser fornecido com Systemd=true se você não usa o argumento do comando, como a configuração do ASP.NET Core requer um valor, adicionamos uma verificação especial para o --systemd flag. Esses argumentos personalizados não têm formas curtas como -s , -u .
--user-secret deve ser fornecido por meio de qualquer método para fornecer um valor de configuração do ASP.NET Core, ou uma NullReferenceException do userSecret será atribuída.
Observação
Se --token e --token-file são especificados, nós preferimos --token . Se você esquecer de definir nenhum deles, usamos um valor gerado aleatoriamente. Você pode descobrir na saída de log após enviar qualquer solicitação ao programa e atender a um erro de autenticação.
Importante
Se você deseja definir a permissão do soquete Unix, deve escrever seu valor real em vez do formato octal. Por exemplo, é necessário usar 511 777 .
Run dotnet publish -c Release e você pode obter binário em E5Renewer/bin/Release/net8.0/publish
Usando curl ou qualquer ferramenta que possa enviar uma solicitação HTTP, envie a solicitação para pontos de extremidade como http://127.0.0.1:5000 ou unix soket /path/to/socket , cada solicitação deve ser enviada com Authorization: Bearer <auth_token> . Você receberá a resposta JSON se tudo estiver bem. Se for uma solicitação GET, envie o registro de data e hora de MilisEcond no timestamp de param de consulta, se for uma solicitação de postagem, envie um registro de data e hora do MilisEcond no Post JSON com o timestamp e converta -o na string. Na maioria das vezes, retornaremos o JSON em vez disso, mas você precisa verificar o código de resposta para ver se a solicitação é sucesso. Se você estiver usando o HTTPS, basta enviar a solicitação HTTPS.
Por exemplo:
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>"
}
O servidor aceitará apenas a solicitação menos de 30 segundos mais antiga que o horário do servidor.
Veja http-api.md para possível APIs
Criamos um sistema de módulos para estender o programa, você pode verificar os modules.md para obter mais informações.