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 usar o SharePoint Online, você pode definir aplicativos no Entra ID e esses aplicativos podem receber permissões para o SharePoint, mas também para todos os outros serviços no Microsoft 365. Esse modelo é o modelo preferencial caso você esteja usando o SharePoint Online, se estiver usando o SharePoint local, precisará usar o modelo Somente SharePoint por meio do Azure ACS baseado, conforme descrito aqui.
Configurar um aplicativo Entra ID para acesso somente ao aplicativo
No Entra ID, ao fazer somente aplicativo, você deve usar um certificado para solicitar acesso às APIs CSOM/REST do SharePoint: qualquer pessoa que tenha o certificado e sua chave privada pode usar o aplicativo e as permissões concedidas ao aplicativo. As etapas abaixo orientam você pela configuração deste modelo.
Criando um aplicativo Entra usando o Portal Entra
Se você deseja criar manualmente o aplicativo Entra, siga as etapas abaixo para criar e configurar seu aplicativo Entra:
- Navegue até o Portal Entra e clique em Aplicativos, seguido de Registros de aplicativo na navegação à esquerda
- Clique em Nova página de registro
- Forneça um Nome para seu aplicativo do Entra (por exemplo, Microsoft365AssessmentToolForWorkflow)
- Selecione Cliente público/nativo (celular & área de trabalho) e insira http://localhost como URI de redirecionamento
- Clique em Registrar e o aplicativo Entra será criado e aberto
- Certifique-se de ter definido as permissões de aplicativo necessárias por meio do link de permissões de API na navegação à esquerda
- Vá para Certificados & segredos, clique em Certificados e Carregar certificado, escolha o arquivo .cer do seu certificado e adicione-o.
- Clique em Conceder consentimento de administrador para... para consentir as permissões adicionadas
Observação
- Se não tiver um certificado disponível, você poderá usar o Windows PowerShell para criar um: https://docs.microsoft.com/azure/active-directory/develop/howto-create-self-signed-certificate.
- Você pode aprender mais sobre como criar um aplicativo do Entra nos documentos do Entra.
Criando um aplicativo Entra usando o PowerShell PnP
Usando o PowerShell PnP, criar um aplicativo Entra se torna muito simples. O cmdlet Register-PnPAzureADApp criará um novo aplicativo Entra, criará um novo certificado autoassinado dentro do nó Pessoal (= My) do repositório de certificados CurrentUser e conectará esse certificado ao aplicativo Entra criado. Por fim, as permissões corretas são configuradas e você é solicitado a consentir com essas permissões.
Importante
Se você encontrar erros durante as etapas abaixo, é provável que não tenha as permissões necessárias. Entre em contato com seu locatário / administradores do 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 nome do locatário do Entra e certifique-se de substituí-lo joe@contoso.onmicrosoft.com pela ID de usuário que é um administrador do Entra (ou administrador global). Se você não tiver certeza de qual é o seu nome de locatário do Entra, vá e https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView marque o valor do domínio primário.
Depois de pressionar enter no comando acima, você será solicitado a entrar e deverá entrar usando o usuário especificado para o Username parâmetro. Depois disso, o aplicativo Entra será criado e configurado, seguido por uma espera de 60 segundos para garantir que a criação tenha sido propagada por todos os sistemas. A etapa final é o fluxo de consentimento do administrador: você será solicitado novamente a entrar com o usuário administrador especificado, seguido por uma caixa de diálogo de consentimento mostrando as permissões que estão sendo concedidas ao aplicativo.
Pressione Aceitar para finalizar o fluxo de consentimento. Na saída resultante, você 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
A execução do Register-PnPAzureADApp não apenas criou e configurou o aplicativo Entra, mas também criou um certificado para o fluxo de permissão do aplicativo. Esse certificado foi adicionado ao repositório de certificados do usuário atual, no nó pessoal. Você pode usar certmgr na linha de comando para abrir o armazenamento de certificados do usuário local.
Observação
O certificado também é exportado como arquivo PFX e arquivo cer no sistema de arquivos. Você pode excluir esses arquivos exportados, pois é mais fácil usar o certificado do repositório de certificados.
Usando essa entidade de segurança com o PnP PowerShell
Se você quiser usar esta entidade de segurança Somente Aplicativo do Entra ID com o PnP PowerShell, depois de instalar o módulo PnP do PowerShell, você poderá se conectar ao ambiente do SharePoint Online usando a autenticação não interativa com suporte do 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 você pode executar operações por meio do PowerShell PnP em seu ambiente do SharePoint Online usando este certificado de confiança Apenas aplicativo.
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.
Usando esta entidade de segurança em seu aplicativo CSOM
Siga estas etapas para criar um aplicativo de console C# que usa o CSOM e é autenticado usando o Entra ID com as permissões do aplicativo:
- Criar uma nova solução baseada em console para o C# .NET
- Instale o pacote NuGet MSAL.NET executando o seguinte comando no Console do Gerenciador de Pacotes:
Install-Package Microsoft.Identity.Client - Adicione o seguinte código ao seu aplicativo para configurar a MSAL e adquirir um token de acesso usando 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
}
}
}
Usando esta entidade de segurança em seu aplicativo CSOM usando a biblioteca da estrutura PnP do SharePoint
Em uma primeira etapa, você adiciona o pacote NuGet da biblioteca do PnP Framework: https://www.nuget.org/packages/PnP.Framework.
Feito isso, você pode usar 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 de código aberto com comunidade ativa que fornece suporte para ele. Não há nenhuma SLA para o suporte da ferramenta de software livre por parte da Microsoft.
Usar essa entidade de segurança nos scripts do PowerShell, sem depender do PnP do PowerShell
Por meio de um arquivo PFX e senha
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
Por meio de uma impressão digital para carregar o certificado do repositório de certificados do usuário
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 usar outros meios além dos certificados para realizar o acesso somente ao aplicativo para meu aplicativo do Azure AD?
Não, todas as outras opções são bloqueadas pelo SharePoint Online e resultarão em uma mensagem de Acesso Negado.