Substituir um segredo do cliente prestes a expirar em um Suplemento do SharePoint
Os segredos do cliente para Suplementos do SharePoint registrados usando a página AppRegNew.aspx expiram após um ano. Este artigo explica como adicionar um novo segredo ao suplemento e criar um segredo do cliente válido por três anos.
Observação
Este artigo é sobre os Suplementos do SharePoint distribuídos por meio de um catálogo da organização e registrados com a página AppRegNew.aspx. Se o suplemento for registrado no Painel do Vendedor, confira Criar ou atualizar IDs e segredos do cliente no Painel do Vendedor.
Cronograma de manutenção recomendado
Recomendamos criar novos segredos no mínimo 30 dias antes que eles expirem. Isso lhe dá um mês antes que as credenciais antigas expirem.
Recomendamos remover segredos apenas no mínimo 7 dias após a expiração, desde que você os tenha removido da configuração do aplicativo.
Remover um segredo expirado do ACS antes de removê-lo da configuração do aplicativo causará erros.
Pré-requisitos
Antes de começar, confirme o seguinte:
- O Assistente de Conexão do Microsoft Online Services está instalado no computador de desenvolvimento.
- Você pode se conectar ao Office 365 com o PowerShell: Conectar-se ao Office 365 PowerShell
- Você é um administrador do locatário do Office 365 (ou um administrador do farm) em que o suplemento foi registrado com a página AppRegNew.aspx.
Descobrir as datas de expiração dos Suplementos do SharePoint instalados em locatários do Office 365
Abra o Windows PowerShell e execute o seguinte cmdlet:
Connect-MsolService
No prompt de entrada, insira as credenciais de locatário-administrador (ou administrador do farm) para o locatário ou farm do Office 365 em que o suplemento foi registrado com AppRegNew.aspx.
Gere um relatório que liste cada suplemento e a data em que seu segredo expira com as linhas a seguir. Observe o seguinte sobre este código:
- Primeiro, ele filtra os aplicativos da Microsoft, os suplementos ainda em desenvolvimento (e um tipo de suplemento agora substituído que era chamado de host automático).
- Do restante, ele filtra os suplementos que não são do SharePoint e os suplementos que usam chaves assimétricas, como fluxos de trabalho.
$applist = Get-MsolServicePrincipal -all |Where-Object -FilterScript { ($_.DisplayName -notlike "*Microsoft*") -and ($_.DisplayName -notlike "autohost*") -and ($_.ServicePrincipalNames -notlike "*localhost*") } foreach ($appentry in $applist) { $principalId = $appentry.AppPrincipalId Get-MsolServicePrincipalCredential -AppPrincipalId $principalId -ReturnKeyValues $false | Where-Object { $_.Type -eq "Password" } | ForEach-Object { [PSCustomObject][Ordered]@{ PrincipalName = $appentry.DisplayName PrincipalId = $principalId KeyID = $_.KeyId StartDate = $_.StartDate EndDate = $_.EndDate } | Export-Csv -Path C:\temp\appsec.csv -NoTypeInformation -Delimiter ';' -Append } }
Abra o arquivo C:\temp\appsec.txt para ver o relatório. Deixe a janela do Windows PowerShell aberta para o próximo procedimento se algum dos segredos estiver próximo de expirar.
Gerar um novo segredo
Crie uma variável da ID do cliente com a seguinte linha, usando a ID do cliente do Suplemento do SharePoint como parâmetro.
$clientId = 'client id of the add-in'
Gere um novo segredo do cliente com as seguintes linhas:
$bytes = New-Object Byte[] 32 $rand = [System.Security.Cryptography.RandomNumberGenerator]::Create() $rand.GetBytes($bytes) $rand.Dispose() $newClientSecret = [System.Convert]::ToBase64String($bytes) $dtStart = [System.DateTime]::Now $dtEnd = $dtStart.AddYears(1) New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Symmetric -Usage Sign -Value $newClientSecret -StartDate $dtStart -EndDate $dtEnd New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Symmetric -Usage Verify -Value $newClientSecret -StartDate $dtStart -EndDate $dtEnd New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Password -Usage Verify -Value $newClientSecret -StartDate $dtStart -EndDate $dtEnd $newClientSecret
O novo segredo do cliente aparece no console do Windows PowerShell. Copie-o para um arquivo de texto. Use-o no próximo procedimento.
Dica
Por padrão, o segredo do suplemento dura um ano. Você pode definir isso como mais curto ou mais longo usando o parâmetro -EndDate nas três chamadas do cmdlet New-MsolServicePrincipalCredential.
Atualizar o aplicativo Web remoto no Visual Studio para usar o novo segredo
Importante
Caso seu suplemento tenha sido originalmente criado com uma versão de pré-lançamento do Microsoft Office Developer Tools para Visual Studio, ele pode conter uma versão desatualizada do arquivo TokenHelper.cs (ou .vb). Se o arquivo não tem a cadeia de caracteres "secondaryClientSecret", ele está desatualizado e deve ser substituído antes que você possa atualizar o aplicativo Web com um novo segredo. Para obter uma cópia de uma versão de lançamento do arquivo, você precisará do Visual Studio 2012 ou posterior. Crie um novo projeto de Suplemento do SharePoint no Visual Studio. Copie o arquivo TokenHelper dele para o projeto de aplicativo Web do suplemento do SharePoint.
Abra o projeto de Suplemento do SharePoint no Visual Studio e abra o arquivo web.config do projeto de aplicativo Web. Na seção appSettings, há chaves para a ID do cliente e o segredo do cliente. Este é um exemplo:
<appSettings> <add key="ClientId" value="your client id here" /> <add key="ClientSecret" value="your old secret here" /> ... other settings may be here ... </appSettings>
Altere o nome da chave ClientSecret para
SecondaryClientSecret
, como mostrado no seguinte exemplo:<add key="SecondaryClientSecret" value="your old secret here" />
Observação
Se você estiver executando esse procedimento pela primeira vez, não haverá nenhuma entrada de propriedade SecondaryClientSecret neste ponto no arquivo de configuração. No entanto, se você estiver executando o procedimento para a expiração subsequente do segredo do cliente (segunda ou terceira), a propriedade SecondaryClientSecret já estará presente e conterá o antigo segredo inicial ou já expirado. Nesse caso, exclua a propriedade SecondaryClientSecret primeiro, antes de renomear ClientSecret.
Adicione uma nova chave ClientSecret e forneça a ela o novo segredo do cliente. Sua marcação deverá ter a seguinte aparência:
<appSettings> <add key="ClientId" value="your client id here" /> <add key="ClientSecret" value="your new secret here" /> <add key="SecondaryClientSecret" value="your old secret here" /> ... other settings may be here ... </appSettings>
Importante
Não será possível usar o segredo do cliente recém-gerado até que o segredo atual expire. Portanto, alterar a chave ClientId para o novo segredo do cliente sem a chave SecondaryClientSecret presente não funcionará. Você deve seguir o procedimento neste artigo e aguardar a expiração do segredo do cliente anterior. Em seguida, poderá remover o SecondaryClientSecret, se desejar.
Se você tiver alterado para um novo arquivo TokenHelper, recrie o projeto.
Republicar o aplicativo Web.
Criar um segredo do cliente válido por três anos
Para os segredos do cliente expirados, primeiro você deve excluir todos os segredos expirados de determinada clientId. Em seguida, crie outra com o MSO PowerShell, aguarde pelo menos 24 horas e teste o aplicativo com a nova clientId e a chave ClientSecret.
Conecte-se à MSOnline por meio do usuário administrador de locatário com a marcação abaixo usando o Windows PowerShell do SharePoint.
import-module MSOnline $msolcred = get-credential connect-msolservice -credential $msolcred
Obtenha ServicePrincipals e as chaves. Imprimir $keys retorna três registros. Você também verá a EndDate de cada chave. Confirme se a chave expirada é exibida.
Observação
A clientId precisa corresponder à clientId expirada. É recomendável excluir todas as chaves, expiradas e não expiradas, para essa clientId.
$clientId = "27c5b286-62a6-45c7-beda-abbaea6eecf2" $keys = Get-MsolServicePrincipalCredential -AppPrincipalId $clientId $keys
Remova todas as chaves depois de confirmar que realmente expiraram.
Remove-MsolServicePrincipalCredential -KeyIds $keys.KeyId -AppPrincipalId $clientId
Gere um novo ClientSecret para essa clientID. Ele usa a mesma clientId definida na etapa anterior. O novo ClientSecret é válido por três anos.
$bytes = New-Object Byte[] 32 $rand = [System.Security.Cryptography.RandomNumberGenerator]::Create() $rand.GetBytes($bytes) $rand.Dispose() $newClientSecret = [System.Convert]::ToBase64String($bytes) $dtStart = [System.DateTime]::Now $dtEnd = $dtStart.AddYears(3) New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Symmetric -Usage Sign -Value $newClientSecret -StartDate $dtStart -EndDate $dtEnd New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Symmetric -Usage Verify -Value $newClientSecret -StartDate $dtStart -EndDate $dtEnd New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Password -Usage Verify -Value $newClientSecret -StartDate $dtStart -EndDate $dtEnd $newClientSecret
Copie a saída de $newClientSecret.
Substitua o Web.config por essa ClientId e pelo ClientSecret. Você não precisa de configurações do aplicativo de SecondaryClientSecret.
Aguarde pelo menos 24 horas para propagar ClientSecret para o SPO (Office SharePoint).