Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn Sie SharePoint Online verwenden, können Sie Anwendungen in Entra ID definieren, und diesen Anwendungen können Berechtigungen für SharePoint, aber auch für alle anderen Dienste in Microsoft 365 erteilt werden. Dieses Modell ist das bevorzugte Modell für den Fall, dass Sie SharePoint Online verwenden. Wenn Sie SharePoint lokal verwenden, müssen Sie das Nur-SharePoint-Modell über basierende Azure ACS verwenden, wie hier beschrieben.
Einrichten einer Entra ID-App für den reinen App-Zugriff
In Entra ID müssen Sie beim Nur-App-Vorgang ein Zertifikat verwenden, um Zugriff auf SharePoint CSOM/REST-APIs anzufordern: Jeder Benutzer, der über das Zertifikat und seinen privaten Schlüssel verfügt, kann die App und die der App gewährten Berechtigungen verwenden. Die folgenden Schritte führen Sie durch die Einrichtung dieses Modells.
Erstellen einer Entra-Anwendung mithilfe des Entra-Portals
Wenn Sie die Entra-Anwendung manuell erstellen möchten, führen Sie die folgenden Schritte aus, um Ihre Entra-Anwendung zu erstellen und zu konfigurieren:
- Navigieren Sie zum Entra-Portal, und klicken Sie auf Anwendungen, gefolgt von App-Registrierungen im linken Navigationsbereich.
- Klicken Sie auf die Seite "Neue Registrierung ".
- Geben Sie einen Namen für Ihre Entra-Anwendung an (z. B. Microsoft365AssessmentToolForWorkflow)
- Wählen Sie Public client/native (Mobile & Desktop) aus, und geben Sie als Umleitungs-URI ein http://localhost .
- Klicken Sie auf Registrieren , und die Entra-Anwendung wird erstellt und geöffnet.
- Stellen Sie sicher, dass Sie die erforderlichen Anwendungsberechtigungen über den Link API-Berechtigungen im linken Navigationsbereich definiert haben.
- Wechseln Sie zu Zertifikate & Geheimnisse, klicken Sie auf Zertifikate und Zertifikat hochladen, wählen Sie die .cer Datei Ihres Zertifikats aus, und fügen Sie sie hinzu.
- Klicken Sie auf Administratoreinwilligung erteilen für... , um den hinzugefügten Berechtigungen zuzustimmen.
Hinweis
- Wenn Sie nicht über ein Zertifikat verfügen, können Sie Windows PowerShell verwenden, um eines zu erstellen: https://docs.microsoft.com/azure/active-directory/develop/howto-create-self-signed-certificate.
- Weitere Informationen zum Erstellen einer Entra-Anwendung finden Sie in der Entra-Dokumentation.
Erstellen einer Entra-Anwendung mit PnP PowerShell
Mit PnP PowerShell wird das Erstellen einer Entra-Anwendung sehr einfach. Das Cmdlet Register-PnPAzureADApp erstellt eine neue Entra-Anwendung, erstellt ein neues selbstsigniertes Zertifikat im persönlichen Knoten (= My) des CurrentUser-Zertifikatspeichers und bindet dieses Zertifikat mit der erstellten Entra-Anwendung zusammen. Schließlich werden die richtigen Berechtigungen konfiguriert, und Sie werden aufgefordert, diesen Berechtigungen zuzustimmen.
Wichtig
Wenn während der folgenden Schritte Fehler auftreten, verfügen Sie wahrscheinlich nicht über die erforderlichen Berechtigungen. Bitte wenden Sie sich an Ihre Mandanten-/Entra-Administratoren, um Hilfe zu benötigen.
# 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
Hinweis
Ersetzen Sie durch contoso.onmicrosoft.com den Namen Ihres Entra-Mandanten, und stellen Sie sicher, dass Sie durch die Benutzer-ID ersetzen joe@contoso.onmicrosoft.com , die ein Entra-Administrator (oder globaler Administrator) ist. Wenn Sie nicht sicher sind, wie Der Name Ihres Entra-Mandanten lautet, wechseln Sie zu https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView , und überprüfen Sie den Wert der primären Domäne.
Nachdem Sie die EINGABETASTE für den obigen Befehl gedrückt haben, werden Sie zur Anmeldung aufgefordert, und Sie sollten sich mit dem Benutzer anmelden, den Sie für den Username Parameter angegeben haben. Danach wird die Entra-Anwendung erstellt und konfiguriert, gefolgt von einer Wartezeit von 60 Sekunden, um sicherzustellen, dass die Erstellung auf alle Systeme verteilt wurde. Der letzte Schritt ist der Ablauf der Administratoreinwilligung: Sie werden erneut aufgefordert, sich mit dem angegebenen Administratorbenutzer anzumelden, gefolgt von einem Zustimmungsdialogfeld mit den Berechtigungen, die der Anwendung gewährt werden. Klicken Sie auf Annehmen , um den Zustimmungsfluss abzuschließen. In der resultierenden Ausgabe erhalten Sie einige wichtige Informationen:
Pfx file : D:\assessment\Microsoft365AssessmentTool.pfx
Cer file : D:\assessment\Microsoft365AssessmentTool.cer
AzureAppId/ClientId : 95610f5d-729a-4cd1-9ad7-1fa9052e50dd
Certificate Thumbprint : 165CCE93E08FD3CD85B7B25D5E91C05B1D1E49FE
Beim Ausführen von Register-PnPAzureADApp wurde nicht nur die Entra-Anwendung erstellt und konfiguriert, es wurde auch ein Zertifikat für den Anwendungsberechtigungsfluss erstellt. Dieses Zertifikat wurde dem Zertifikatspeicher des aktuellen Benutzers unter dem persönlichen Knoten hinzugefügt. Sie können in der Befehlszeile verwenden certmgr , um den Zertifikatspeicher des lokalen Benutzers zu öffnen.
Hinweis
Das Zertifikat wird auch als PFX-Datei und CER-Datei im Dateisystem exportiert. Sie können diese exportierten Dateien löschen, da es einfacher ist, das Zertifikat aus dem Zertifikatspeicher zu verwenden.
Verwenden dieses Prinzipals mit PnP PowerShell
Wenn Sie diesen Entra ID-App-Prinzipal mit PnP PowerShell verwenden möchten, können Sie nach der Installation des PnP PowerShell-Moduls mithilfe der nicht interaktiven Authentifizierung , die von PnP PowerShell unterstützt wird, eine Verbindung mit Ihrer SharePoint Online-Umgebung herstellen.
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>
Sie können jetzt Vorgänge über PnP PowerShell für Ihre SharePoint Online-Umgebung ausführen, indem Sie diese Zertifikatvertrauensstellung nur app verwenden.
Hinweis
PnP PowerShell ist eine Open Source-Lösung mit aktiver Community, die Support dafür bietet. Es gibt keine SLA für den Support des Open-Source-Tools durch Microsoft.
Verwenden dieses Prinzipals in Ihrer CSOM-Anwendung
Führen Sie die folgenden Schritte aus, um eine C#-Konsolenanwendung zu erstellen, die CSOM verwendet und sich mit Entra ID mit Anwendungsberechtigungen authentifiziert:
- Erstellen einer neuen konsolenbasierten Lösung für c# .net
- Installieren Sie das MSAL.NET NuGet-Paket, indem Sie den folgenden Befehl in der Paket-Manager-Konsole ausführen:
Install-Package Microsoft.Identity.Client - Fügen Sie Ihrer Anwendung den folgenden Code hinzu, um MSAL zu konfigurieren und ein Zugriffstoken mithilfe eines Zertifikats abzurufen.
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
}
}
}
Verwenden dieses Prinzips in Ihrer CSOM-Anwendung mithilfe der SharePoint PnP Framework-Bibliothek
In einem ersten Schritt fügen Sie das NuGet-Paket der PnP Framework-Bibliothek hinzu: https://www.nuget.org/packages/PnP.Framework.
Anschließend können Sie das folgende Codekonstrukt verwenden:
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);
};
}
}
}
Hinweis
PnP Framework ist eine Open-Source-Lösung mit aktiver Community, die Unterstützung dafür bereitstellt. Es gibt keine SLA für den Support des Open-Source-Tools durch Microsoft.
Verwenden dieses Prinzipals in Ihren PowerShell-Skripts ohne Abhängigkeit von PnP PowerShell
Über eine PFX-Datei und ein Kennwort
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
Über einen Fingerabdruck zum Laden des Zertifikats aus dem Zertifikatspeicher des Benutzers
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
Häufig gestellte Fragen
Kann ich für meine Azure AD-App andere Mittel neben Zertifikaten verwenden, um den Zugriff nur auf Apps zu realisieren?
Nein, alle anderen Optionen werden von SharePoint Online blockiert und führen zu einer Meldung Zugriff verweigert.