Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Ao utilizar o SharePoint Online, pode definir aplicações no Entra ID e estas aplicações podem receber permissões para o SharePoint, mas também para todos os outros serviços no Microsoft 365. Este modelo é o modelo preferencial caso esteja a utilizar o SharePoint Online, se estiver a utilizar o SharePoint no local, terá de utilizar o modelo Apenas o SharePoint através de acs Azure baseados, conforme descrito aqui.
Configurar uma aplicação Entra ID para acesso apenas à aplicação
No Entra ID ao efetuar apenas aplicações, tem de utilizar um certificado para pedir acesso a APIS REST/CSOM do SharePoint: qualquer pessoa que tenha o certificado e a respetiva chave privada pode utilizar a aplicação e as permissões concedidas à aplicação. Os passos abaixo orientam-no ao longo da configuração deste modelo.
Criar uma aplicação Entra com o Portal do Entra
Se quiser criar manualmente a aplicação Entra, siga os passos abaixo para criar e configurar a sua aplicação Entra:
- Navegue para o Portal do Entra e clique em Aplicações, seguido de Registros de aplicativo no painel de navegação esquerdo
- Clique na página Novo registo
- Indique um Nome para a sua aplicação Entra (por exemplo, Microsoft365AssessmentToolForWorkflow)
- Selecione Cliente público/nativo (móvel & ambiente de trabalho) e introduza http://localhost como URI de redirecionamento
- Clique em Registar e a aplicação Entra é criada e aberta
- Confirme que definiu as permissões de aplicação necessárias através da ligação de permissões da API à navegação à esquerda
- Aceda a Certificados & segredos, clique em Certificados e Carregar certificado, escolha o ficheiro .cer do certificado e adicione-o.
- Clique em Conceder consentimento do administrador para... para dar consentimento às permissões adicionadas
Observação
- Se não tiver um certificado disponível, pode utilizar Windows PowerShell para criar um: https://docs.microsoft.com/azure/active-directory/develop/howto-create-self-signed-certificate.
- Pode saber mais sobre como criar uma aplicação Entra a partir dos documentos do Entra.
Criar uma aplicação Entra com o PnP PowerShell
Utilizar o PnP PowerShell para criar uma aplicação Entra torna-se muito simples. O cmdlet Register-PnPAzureADApp criará uma nova aplicação Entra, criará um novo certificado autoassinado dentro do nó Pessoal (= O Meu) do arquivo de certificados CurrentUser e ligará esse certificado à aplicação Entra criada. Por fim, são configuradas as permissões corretas e é-lhe pedido que consofira estas permissões.
Importante
Se encontrar erros durante os passos abaixo, é provável que não tenha as permissões necessárias. Contacte os administradores do seu inquilino/Entra para obter ajuda.
# Before you use this!!
# - Remove/update the application/delegated permissions depending on your needs
# - Also update the Tenant and Username properties to match your environment.
#
# If you prefer to have a password set to secure the created PFX file then add below parameter
# -CertificatePassword (ConvertTo-SecureString -String "password" -AsPlainText -Force)
#
# See https://pnp.github.io/powershell/cmdlets/Register-PnPAzureADApp.html for more options
#
Register-PnPAzureADApp -ApplicationName Microsoft365AssessmentToolForAlerts `
-Tenant contoso.onmicrosoft.com `
-Store CurrentUser `
-GraphApplicationPermissions "Sites.Read.All" `
-SharePointApplicationPermissions "Sites.FullControl.All" `
-GraphDelegatePermissions "Sites.Read.All", "User.Read" `
-SharePointDelegatePermissions "AllSites.FullControl" `
-Username "joe@contoso.onmicrosoft.com" `
-Interactive
Observação
Substitua contoso.onmicrosoft.com pelo seu nome de inquilino entra e certifique-se de que substitui joe@contoso.onmicrosoft.com pelo ID de utilizador que é um administrador do Entra (ou administrador global). Se não tiver a certeza sobre qual é o seu nome de inquilino entra, aceda a https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView e marcar para o valor de Domínio primário.
Depois de premir Enter no comando acima, ser-lhe-á pedido que inicie sessão e que inicie sessão com o utilizador que especificou para o Username parâmetro . Depois de concluído, a aplicação Entra será criada e configurada, seguida de uma espera de 60 segundos para garantir que a criação foi propagada em todos os sistemas. O passo final é o fluxo de consentimento do administrador: ser-lhe-á novamente pedido para iniciar sessão com o utilizador administrador especificado, seguido de uma caixa de diálogo de consentimento que mostra as permissões que estão a ser concedidas à aplicação. Prima Aceitar para finalizar o fluxo de consentimento. Na saída resultante, obterá algumas informações importantes:
Pfx file : D:\assessment\Microsoft365AssessmentTool.pfx
Cer file : D:\assessment\Microsoft365AssessmentTool.cer
AzureAppId/ClientId : 95610f5d-729a-4cd1-9ad7-1fa9052e50dd
Certificate Thumbprint : 165CCE93E08FD3CD85B7B25D5E91C05B1D1E49FE
Executar o Register-PnPAzureADApp não só criou e configurou a aplicação Entra, como também criou um certificado para o fluxo de permissão da aplicação. Este certificado foi adicionado ao arquivo de certificados do utilizador atual, sob o nó pessoal. Pode utilizar certmgr na linha de comandos para abrir o arquivo de certificados do utilizador local.
Observação
O certificado também é exportado como ficheiro PFX e ficheiro cer no sistema de ficheiros. Não hesite em eliminar estes ficheiros exportados, uma vez que é mais fácil utilizar o certificado do arquivo de certificados.
Utilizar este principal com o PowerShell PnP
Se quiser utilizar este principal apenas da Aplicação Entra ID com o PnP PowerShell, depois de instalar o módulo PnP do PowerShell, pode ligar-se ao seu ambiente do SharePoint Online com a autenticação não interativa suportada pelo PnP PowerShell.
Connect-PnPOnline [yourtenant].sharepoint.com -ClientId <client id of your Entra ID Application Registration> -Tenant <tenant>.onmicrosoft.com -CertificatePath <path to your .pfx certificate>
# or
Connect-PnPOnline [yourtenant].sharepoint.com -ClientId <client id of your Entra ID Application Registration> -Tenant <tenant>.onmicrosoft.com -Thumbprint <thumbprint that can be found in the certificate>
Agora pode efetuar operações através do PnP PowerShell no seu ambiente do SharePoint Online através desta fidedignidade apenas da Aplicação de certificado.
Observação
O PnP PowerShell é uma solução de software livre com uma comunidade ativa de suporte. Não há nenhuma SLA para o suporte da ferramenta de software livre por parte da Microsoft.
Utilizar este principal na sua aplicação CSOM
Siga estes passos para criar uma aplicação de Consola C# que utiliza CSOM e autentica com o Entra ID com permissões de aplicação:
- Criar uma nova solução baseada na consola para c# .net
- Instale o MSAL.NET pacote NuGet ao executar o seguinte comando na Consola do Gestor de Pacotes:
Install-Package Microsoft.Identity.Client - Adicione o seguinte código à aplicação para configurar o MSAL e adquirir um token de acesso com um certificado
using System;
using System.Threading.Tasks;
using Microsoft.SharePoint.Client;
using System.Security.Cryptography.X509Certificates;
using Microsoft.Identity.Client;
namespace YourNamespace
{
class Program
{
static async Task Main(string[] args)
{
//Generate Access Token using MSAL
#region Access Token
string tenantId = "{Tenant_Id}";
string clientId = "{Client_Id}";
string certificatePath = @"{Full Path to the certificate .Pfx file}";
string certificatePassword = "{Password of the .Pfx file}";
var siteUrl = new Uri("{SPO Site URL}");
X509Certificate2 certificate = new X509Certificate2(certificatePath, certificatePassword);
IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithCertificate(certificate)
.WithAuthority(new Uri($"https://login.microsoftonline.com/{tenantId}"))
.Build();
string[] scopes = new string[] { "https://domain.sharepoint.com/.default" };
AuthenticationResult result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
var accessToken = result.AccessToken;
Console.WriteLine($"Access Token: {accessToken}");
Console.WriteLine();
Console.WriteLine();
#endregion
//Generate SPO Context using the Access token
#region SPO Context
using (var context = new ClientContext(siteUrl))
{
context.ExecutingWebRequest += async (sender, e) =>
{
// Insert the access token in the request
e.WebRequestExecutor.RequestHeaders["Authorization"] = "Bearer " + accessToken;
};
// Read web properties
var web = context.Web;
context.Load(web, w => w.Id, w => w.Title);
await context.ExecuteQueryAsync();
Console.WriteLine($"{web.Id} - {web.Title}");
Console.ReadKey();
}
#endregion
}
}
}
Utilizar este principal na sua aplicação CSOM com a biblioteca do SharePoint PnP Framework
Num primeiro passo, vai adicionar o pacote NuGet da biblioteca do PnP Framework: https://www.nuget.org/packages/PnP.Framework.
Depois de o fazer, pode utilizar a construção de código abaixo:
using PnP.Framework;
using System;
namespace AzureADCertAuth
{
class Program
{
static void Main(string[] args)
{
var authManager = new AuthenticationManager("<application id>", "c:\\temp\\mycert.pfx", "<password>", "contoso.onmicrosoft.com");
using (var cc = authManager.GetContext("https://contoso.sharepoint.com/sites/demo"))
{
cc.Load(cc.Web, p => p.Title);
cc.ExecuteQuery();
Console.WriteLine(cc.Web.Title);
};
}
}
}
Observação
O PnP Framework é uma solução open source com uma comunidade ativa que lhe fornece suporte. Não há nenhuma SLA para o suporte da ferramenta de software livre por parte da Microsoft.
Utilizar este principal nos scripts do PowerShell sem depender do PowerShell do PnP
Através de um ficheiro PFX e palavra-passe
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
Add-Type -Path "<Full Path to the Microsoft.Identity.Client.dll file>"
Add-Type -Path "<Full Path to the Microsoft.IdentityModel.Abstractions.dll file>"
#Declare the Variables
$tenantId = "<Tenant_Id>"
$clientId = "<Client_Id>"
$certPath = "<Full Path to the PFX file>"
$certPassword = "<Password of the .pfx certificate>"
$siteUrl = "https://<Domain>.sharepoint.com/sites/<SiteName>"
# Load the certificate
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($certPath, $certPassword, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
# Get the access token using MSAL
$authority = "https://login.microsoftonline.com/$tenantId"
$scope = New-Object System.Collections.Generic.List[string]
$scope.Add("https://<Domain>.sharepoint.com/.default")
$msalApp = [Microsoft.Identity.Client.ConfidentialClientApplicationBuilder]::Create($clientId).WithAuthority($authority).WithCertificate($cert).Build()
$authResult = $msalApp.AcquireTokenForClient($scope).ExecuteAsync().Result
$accessToken = $authResult.AccessToken
$context = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)
# Attach event handler for Authorization header
$context.add_ExecutingWebRequest({
param($sender, $e)
$e.WebRequestExecutor.RequestHeaders["Authorization"] = "Bearer $accessToken"
})
# Example: Load Web Title
$web = $context.Web
$context.Load($web)
$context.ExecuteQuery()
Write-Host "Site Title:" $web.Title -ForegroundColor Green
Através de um thumbprint para carregar o certificado a partir do arquivo de certificados do utilizador
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
Add-Type -Path "<Full Path to the Microsoft.Identity.Client.dll file>"
Add-Type -Path "<Full Path to the Microsoft.IdentityModel.Abstractions.dll file>"
$tenantId = "<Tenant_Id>"
$clientId = "<Client_Id>"
$thumbprint = "<Thumbprint value>"
$siteUrl = "https://<Domain>.sharepoint.com/sites/<SiteName>"
# Load the certificate from the CurrentUser\My store
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store("My", "CurrentUser")
$store.Open("ReadOnly")
$cert = $store.Certificates | Where-Object { $_.Thumbprint -eq $thumbprint }
$store.Close()
if (-not $cert) {
Write-Error "Certificate with thumbprint $thumbprint not found."
return
}
# Get the access token using MSAL
$authority = "https://login.microsoftonline.com/$tenantId"
$scope = New-Object System.Collections.Generic.List[string]
$scope.Add("https://<Domain>.sharepoint.com/.default")
$msalApp = [Microsoft.Identity.Client.ConfidentialClientApplicationBuilder]::Create($clientId).WithAuthority($authority).WithCertificate($cert).Build()
$authResult = $msalApp.AcquireTokenForClient($scope).ExecuteAsync().Result
$accessToken = $authResult.AccessToken
# Output the token
$context = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)
# Attach event handler for Authorization header
$context.add_ExecutingWebRequest({
param($sender, $e)
$e.WebRequestExecutor.RequestHeaders["Authorization"] = "Bearer $accessToken"
})
# Example: Load Web Title
$web = $context.Web
$context.Load($web)
$context.ExecuteQuery()
Write-Host "Site Title:" $web.Title -ForegroundColor Green
Perguntas frequentes
Posso utilizar outros meios para além de certificados para obter acesso apenas à aplicação para a minha aplicação Azure AD?
Não, todas as outras opções são bloqueadas pelo SharePoint Online e resultarão numa mensagem de Acesso Negado.