Einrichten und Konfigurieren von SharePoint Embedded
In dieser Übung erstellen Sie eine Microsoft Entra ID-Anwendung, richten SharePoint Embedded auf Ihrem Microsoft 365 SharePoint-Mandanten ein und erstellen Ihren ersten Containertyp und Container.
Voraussetzungen
- Postman hat den Desktopclient installiert, der bei einem kostenlosen oder kostenpflichtigen Postman-Konto angemeldet ist.
- Zugriff auf ein Administratorkonto in einem Microsoft 365-Mandanten.
- Windows PowerShell-Eingabeaufforderung.
Registrieren der Microsoft Entra ID-Anwendung
Benutzerdefinierte SharePoint Embedded-Anwendungen verwenden eine benutzerdefinierte Microsoft Entra ID-Anwendung zum Authentifizieren und Abrufen der erforderlichen Berechtigungen zum Aufrufen der Microsoft Graph- und Microsoft SharePoint-APIs.
Öffnen Sie einen Browser, und navigieren Sie zur Eingabe des Microsoft Entra ID-Administrators. Melden Sie sich mit einem Geschäfts-, Schul- oder Unikonto für Ihren Microsoft 365-Mandanten an, der über globale Administratorrechte verfügt.
Wählen Sie im linken Navigationsbereich Identitätsanwendungen >> App-Registrierungen und dann Neue Registrierung aus.
Legen Sie auf der Seite Anwendung registrieren die Werte wie folgt fest, und wählen Sie dann Registrieren aus:
- Name: SharePoint Embedded-App
- Unterstützte Kontotypen: Konten in einem beliebigen Organisationsverzeichnis (Beliebiger Microsoft Entra ID-Mandant – mehrinstanzenfähig)
Nach dem Erstellen der SharePoint Embedded-App zeigt Microsoft Entra ID die Details der neuen App an. Erstellen Sie eine Textdatei, um mehrere Werte nachzuverfolgen, die Sie später in diesem Modul benötigen.
Kopieren Sie die Anwendungs-ID (Client-ID) & Verzeichnis-ID (Mandant) von der Übersichtsseite der App in Ihre lokale Textdatei.
Konfigurieren einer Authentifizierung
Als Nächstes konfigurieren Sie die Authentifizierungseinstellungen der App. Wählen Sie im linken Navigationsbereich Authentifizierung verwalten > und dann Plattform hinzufügen aus.
Wählen Sie die Option Web aus, und geben Sie für die Umleitungs-URIs die Zeichenfolge Konfigurieren ein https://oauth.pstmn.io/v1/callback
, und wählen Sie sie aus.
Wählen Sie als Nächstes URI für neue Webplattformhttps://oauth.pstmn.io/v1/browser-callback
hinzufügen und dann Konfigurieren aus.
Diese beiden Optionen werden später in diesem Modul verwendet, um Zugriffstoken mithilfe des Postman-Clients zu authentifizieren und abzurufen.
Scrollen Sie nach unten zum Abschnitt Implizite Genehmigung und Hybridflows , wählen Sie die Option Zugriffstoken (für implizite Flows verwendet) aus, und wählen Sie dann Speichern aus.
Fügen Sie eine weitere Plattform hinzu, indem Sie Plattform hinzufügen, Single-Page-Anwendung auswählen, den Umleitungs-URI auf http://localhost
festlegen, und wählen Sie Konfigurieren aus.
Konfigurieren von API-Berechtigungen
Konfigurieren Sie als Nächstes die App mit weiteren Berechtigungen, damit sie Containertypen und Container erstellen und darauf zugreifen kann.
Hinweis
Zum Zeitpunkt der Veröffentlichung sind die erforderlichen Berechtigungen noch nicht in der API-Auswahl im Microsoft Entra ID Admin Center sichtbar. Um die Berechtigungen FileStorageContainer.Selected
für Microsoft Graph und Container.Selected
SharePoint hinzuzufügen, fügen Sie sie direkt über die Berechtigungs-IDs zum Manifest der App hinzu.
Wählen Sie im linken Navigationsbereich Manifest verwalten > aus. Suchen Sie die Eigenschaft requiredResourceAccess
, und bearbeiten Sie sie so, dass sie wie der folgende JSON-Code aussieht:
"requiredResourceAccess": [
{
"resourceAppId": "00000003-0000-0ff1-ce00-000000000000",
"resourceAccess": [
{
"id": "4d114b1a-3649-4764-9dfb-be1e236ff371",
"type": "Scope"
},
{
"id": "19766c1b-905b-43af-8756-06526ab42875",
"type": "Role"
}
]
},
{
"resourceAppId": "00000003-0000-0000-c000-000000000000",
"resourceAccess": [
{
"id": "085ca537-6565-41c2-aca7-db852babc212",
"type": "Scope"
},
{
"id": "40dc41bc-0f7e-42ff-89bd-d9516947e474",
"type": "Role"
}
]
}
],
Wichtig
Erstellen Sie keine doppelten Objekte mit demselben resourceAppIds
. Fügen Sie stattdessen die zusätzlichen -Objekte dem vorhandenen resourceAppIds
hinzu. Wenn z. requiredResourceAccess
B. bereits auf Folgendes festgelegt ist:
"requiredResourceAccess": [
{
"resourceAppId": "00000003-0000-0000-c000-000000000000",
"resourceAccess": [
{
"id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d",
"type": "Scope"
}
]
}
],
Fügen Sie dem vorhandenen "resourceAppId": "00000003-0000-0000-c000-000000000000"
Objekt die beiden neuen Berechtigungen hinzu, damit es jetzt über drei (3) Berechtigungen verfügt.
Erteilen der Administratoreinwilligung für die neuen Berechtigungen
Einige der Berechtigungen erfordern die Administratoreinwilligung. Wählen Sie im linken Navigationsbereich API-Berechtigungen aus, scrollen Sie zum unteren Rand der Seite, und wählen Sie den Link Unternehmensanwendungen aus.
Wählen Sie auf der Seite Berechtigungen die Option Administratoreinwilligung für Contoso erteilen aus. Wenn Sie zur Anmeldung aufgefordert werden, verwenden Sie dasselbe Geschäfts-, Schul- und Unikonto , das Sie für die Anmeldung beim Microsoft Entra ID Admin Center verwendet haben. Wählen Sie auf der Seite Angeforderte Berechtigungendie Option Akzeptieren aus, um den beiden Berechtigungspaaren die Administratoreinwilligung zu erteilen: FileStorageContainer.Selected
für Microsoft Graph und Container.Selected
für SharePoint. Die beiden Paare stellen die Anwendung & delegierten Optionen für jede der beiden Berechtigungen dar.
Erstellen eines geheimen Clientschlüssels
Damit sich eine App mit dem OAuth2-Clientanmeldeinformationsflow mit Microsoft Entra ID authentifizieren kann, benötigt sie sowohl die Client-ID als auch einen geheimen Clientschlüssel.
Wählen Sie im linken Navigationsbereich Zertifikate verwalten & Geheimnisse aus.>
Wählen Sie im Abschnitt Geheimer Clientschlüssel die Option Neuer geheimer Clientschlüssel aus. Fügen Sie eine Beschreibung hinzu, und wählen Sie eine Gültigkeitsdauer und dann Hinzufügen aus.
Nachdem Sie den geheimen Clientschlüssel erstellt haben, wird er einmal angezeigt. Stellen Sie daher sicher, dass Sie ihn als geheimen Clientschlüssel in Ihre lokale Textdatei kopieren, um ihn später in diesem Modul zu verwenden. Wenn Sie diesen Wert nicht kopieren, müssen Sie einen neuen geheimen Schlüssel erstellen, da ein zuvor erstellter geheimer Schlüssel nicht mehr angezeigt werden kann.
Erstellen eines Zertifikats
Im Gegensatz zu Microsoft Graph, das die App-Authentifizierung mit einer Client-ID und einem geheimen Schlüssel zulässt, erfordert SharePoint, dass die App mithilfe der Client-ID und des Zertifikats authentifiziert wird. Daher müssen wir jetzt ein Zertifikat erstellen.
Öffnen Sie eine Windows PowerShell-Eingabeaufforderung als Administrator, und führen Sie das folgende PowerShell-Skript aus. Wenn Sie dazu aufgefordert werden, geben Sie den Namen für Ihr Zertifikat ein, z. B. SharePoint Embedded:
$name = Read-Host -Prompt "Certificate name: "
$cert = New-SelfSignedCertificate -Subject "CN=$name" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256
Export-Certificate -Cert $cert -FilePath "$name.cer"
# Private key to Base64
$privateKey = [System.Security.Cryptography.X509Certificates.RSACertificateExtensions]::GetRSAPrivateKey($cert)
$privateKeyBytes = $privateKey.Key.Export([System.Security.Cryptography.CngKeyBlobFormat]::Pkcs8PrivateBlob)
$privateKeyBase64 = [System.Convert]::ToBase64String($privateKeyBytes, [System.Base64FormattingOptions]::InsertLineBreaks)
# Private key file contents
$privateKeyFileContent = @"
-----BEGIN PRIVATE KEY-----
$privateKeyBase64
-----END PRIVATE KEY-----
"@
# Output to file
$privateKeyFileContent | Out-File -FilePath "$name.key" -Encoding Ascii
Das PowerShell-Skript speichert das Zertifikat (*.cer
) und den privaten Schlüssel (*.key
) in dem Ordner, in dem das PowerShell-Skript ausgeführt wurde.
Wählen Sie im Microsoft Entra ID Admin Center auf der Seite Zertifikate & Geheimnisse der App Zertifikate und dann Zertifikat hochladen aus.
Laden Sie das *.cer
vom PowerShell-Skript generierte hoch, geben Sie dem Zertifikat eine Beschreibung, und wählen Sie dann Hinzufügen aus.
Nachdem das Zertifikat hochgeladen wurde, kopieren Sie den gesamten angezeigten Fingerabdruck in Ihre lokale Textdatei.
Erstellen eines neuen Containertyps für Ihre SharePoint Embedded-App
Der nächste Schritt besteht darin, einen Containertyp für Ihre Anwendung zu erstellen.
Öffnen Sie eine Windows PowerShell-Eingabeaufforderung als Administrator.
Installieren oder Aktualisieren des SharePoint Online PowerShell-Moduls
Wenn Sie das SharePoint Online PowerShell-Modul noch nicht installiert haben, installieren Sie es, indem Sie den folgenden Befehl ausführen:
Install-Module "Microsoft.Online.SharePoint.PowerShell"
Wenn Sie es installiert haben, stellen Sie sicher, dass Sie die neueste Version installiert haben, indem Sie es aktualisieren:
Upgrade-Module "Microsoft.Online.SharePoint.PowerShell"
Hinweis
Wenn Sie nicht sicher sind, ob es bereits installiert ist, versuchen Sie, die Upgrade-Module
erste auszuführen. Wenn es fehlschlägt, ist es nicht installiert. Führen Sie daher das Install-Module
Cmdlet aus.
Erstellen des Containertyps
Wenn das neueste SharePoint Online PowerShell-Modul installiert ist, besteht der nächste Schritt darin, einen Containertyp in Ihrem Mandanten zu erstellen.
Aktualisieren Sie die folgenden Werte im folgenden PowerShell-Skript, und führen Sie dann das Skript aus:
-
{{SPO_ADMIN_URL}}
: Dies ist die URL Ihres SharePoint Online Admin Centers. Sie können dies erhalten, indem Sie sich mit dem[https://portal.microsoft.com](https://portal.microsoft.com)
Geschäfts-, Schul- und Unikonto des Administratorkontos Ihres Mandanten anmelden, unten im linken Navigationsbereich Alle anzeigen und dann Admin Center > SharePoint auswählen. Kopieren Sie die URL des SharePoint Admin Centers, und verwenden Sie diesen Wert. Wenn Ihre Mandanten-ID beispielsweise Contoso123 lautet, lautethttps://contoso123-admin.sharepoint.com
Ihre Administrator-URL . -
{{CONTAINER_TYPE_NAME}}
: Wählen Sie einen Namen für Ihren neuen Containertyp aus. Verwenden SieFirstContainerType
beispielsweise . -
{{AZURE_ENTRA_APP_ID}}
: Legen Sie dies auf den Wert der Microsoft Entra ID-App-ID fest, der auch als "Client-ID" bezeichnet wird, die Sie zuvor erstellt haben. Dieser Wert sollte sich in Ihrer lokalen Textdatei befinden.
Import-Module "Microsoft.Online.SharePoint.PowerShell"
Connect-SPOService -Url "{{SPO_ADMIN_URL}}"
New-SPOContainerType -TrialContainerType -ContainerTypeName "{{CONTAINER_TYPE_NAME}}" -OwningApplicationId "{{AZURE_ENTRA_APP_ID}}"
Das PowerShell-Skript zeigt die Details für Ihren neuen Containertyp an, z. B.:
Container Type ID:
===============================================================================
ContainerTypeId : 3a6b1fc4-0bd9-04b3-3a2a-4843fbb60914
ContainerTypeName : FirstContainerType
OwningApplicationId : 763cd5ea-ade4-4d2a-a143-29498920e18f
Classification : Standard
AzureSubscriptionId : 00000000-0000-0000-0000-000000000000
ResourceGroup :
Region :
Kopieren Sie und ContainerTypeId
ContainerTypeName
zur späteren Verwendung in Ihre lokale Textdatei.
Konfigurieren von Postman für die Authentifizierung mit der Microsoft Entra-ID zum Abrufen von Stellvertretungs- und Anwendungszugriffstoken für Microsoft Graph und SharePoint Online
Der letzte Schritt besteht darin, den neuen Containertyp, den Sie im Microsoft 365-Entwickler-/Anbietermandanten erstellt haben, beim nutzenden Mandanten zu registrieren. Dies erfolgt mit der SharePoint-REST-API. Für diesen Schritt verwenden Sie den Postman-Client.
Bevor Sie die SharePoint-REST-API mit Postman aufrufen können, müssen Sie zunächst Postman so konfigurieren, dass ein Zugriffstoken abgerufen wird.
Erstellen einer neuen Postman-Umgebung
Erstellen Sie zunächst eine neue Postman-Umgebung, in der Umgebungsvariablen gespeichert werden, um Aufrufe zu vereinfachen und alle einstellungen zu zentralisieren.
Wählen Sie in Postman Umgebungen und dann das Plussymbol aus, um eine neue Umgebung zu erstellen.
Nennen Sie die Umgebung SharePoint Embedded.
Fügen Sie der Umgebung die folgenden Variablen hinzu, und legen Sie den Wert Initial auf die Werte aus Ihrer lokalen Textdatei fest. Speichern Sie die Umgebung, nachdem Sie diese Variablen hinzugefügt haben.
Variable | Typ | Anmerkungen | Beispiel |
---|---|---|---|
Clientid | Standard | Die Client-/Anwendungs-ID der App, die zuvor im Microsoft Entra ID Admin Center erstellt wurde. | 763cd5ea-ade4-4d2a-a143-29498920e18f |
ClientSecret | Geheimnis | Der geheime Clientschlüssel der App, die zuvor im Microsoft Entra ID Admin Center erstellt wurde. | JXZ8Q........ jbvanC |
ConsumingTenantId | Standard | Die Mandanten-/Verzeichnis-ID (GUID) der App, die zuvor im Microsoft Entra ID Admin Center erstellt wurde. | 4c57ca2e-a63d-4999-9b69-610a7296e89b |
RootSiteURL | Standard | Die URL Ihres SharePoint Online-Mandanten ohne nachgestellten Schrägstrich. Dies ist identisch mit der SharePoint Online Admin Center-URL ohne die Zeichenfolge -admin. | https://contoso123.sharepoint.com |
ContainerTypeId | Standard | Die ID des Zuvor erstellten Containertyps | 3a6b1fc4-0bd9-04b3-3a2a-4843fbb60914 |
TenantName | Standard | Die ID Ihres SharePoint Online-Mandanten. Dies ist der erste Teil der SharePoint Online Admin Center-URL ohne die Zeichenfolge -admin. | contoso123 |
CertThumbprint | Standard | Der Fingerabdruck des Zertifikats, das Sie zuvor für die App hochgeladen haben, die Sie im Microsoft Entra ID Admin Center erstellt haben. | 905EEA21C472368A36ADEDB26CCE6E760049BC1E |
CertPrivateKey | Geheimnis | Der private Schlüssel des Zertifikats. Kopieren Sie den gesamten Inhalt aus der *.key-Datei, die von dem zuvor ausgeführten PowerShell-Skript generiert wurde, einschließlich der ----- und Endtrennzeichen des Zertifikats. | ---- PRIVATEN SCHLÜSSEL----- ... ----- PRIVATEN SCHLÜSSEL HINZUFÜGEN---— |
ContainerID | Standard | Lassen Sie dieses Feld leer. Sie verwenden dies zu einem späteren Zeitpunkt. |
Wählen Sie die Umgebung aus, indem Sie sie in der Dropdownauswahl oben rechts im Postman-Client auswählen. Die Dropdownliste befindet sich direkt unterhalb der Zahnrad- und Warnungssymbole und oberhalb der Schaltflächen Speichern und Freigeben in derselben Zeile wie die Registerkarten.
Erstellen einer neuen Postman-Sammlung
Erstellen Sie als Nächstes eine neue Postman-Sammlung, in der die Anforderungen gespeichert und die Zugriffstoken abgerufen werden.
Wählen Sie in Postman Sammlungen und dann das Plussymbol aus, um eine neue Sammlung zu erstellen.
Nennen Sie die Sammlung SharePoint Embedded.
Erstellen Sie in der neuen Auflistung mithilfe des Kontexts der Sammlung viele Ordner, um Anforderungen für Container zu speichern. eine in einem delegierten Ordner und eine in einem Anwendungsordner :
Konfigurieren des Anwendungsordners der Postman-Sammlung
Der nächste Schritt besteht darin, die Authentifizierungseinstellung des Anwendungsordners zu aktualisieren. Dies erfordert etwas mehr Arbeit, da wir ein reines App-Token abrufen müssen, um Microsoft Graph aufzurufen. Dazu konfigurieren Sie den Ordner Application so, dass ein Skript heruntergeladen und in einer globalen Variablen gespeichert wird, um es später zu verwenden.
Wählen Sie den Ordner Anwendung und dann die Registerkarte Autorisierung aus. Legen Sie den Typ auf Bearertoken und das Token auf fest {{AppOnlyCertGraphToken}}
.
Hinweis
Postman zeigt einen Überprüfungsfehler wie folgt an. Dies ist zu erwarten und kann vorerst ignoriert werden. Diese Variable wird in einem Moment mit einem Skript erstellt.
Wählen Sie die Registerkarte Skript vor der Anforderung aus, und geben Sie das folgende Skript ein:
// download jsrsasign library and save it to a global variable
if (!pm.globals.has('jsrsasign-js')) {
pm.sendRequest(
'https://kjur.github.io/jsrsasign/jsrsasign-all-min.js',
function (err, res) {
if (err) {
throw new Error(err);
} else {
console.log('Downloaded RSA library');
pm.globals.set('jsrsasign-js', res.text());
}
}
);
}
Speichern Sie die Änderungen an der Auflistung.
Konfigurieren des Ordners "Anwendungscontainer>" der Postman-Sammlung
Wählen Sie als Nächstes den Ordner Anwendungscontainer > der Sammlung aus.
Legen Sie auf der Registerkarte Autorisierung den Typ auf Authentifizierung vom übergeordneten Element erben fest.
Geben Sie auf der Registerkarte Skript vor der Anforderung das folgende Skript ein:
async function ensureAccessToken () {
var validToken = false;
var token = pm.environment.get('AppOnlyCertGraphToken');
if (token) {
console.log('checking stored token');
try {
var tokenObj = KJUR.jws.JWS.parse(token);
var nbf = tokenObj.payloadObj.nbf;
var exp = tokenObj.payloadObj.exp;
var now = getTimeInSec();
if (nbf <= now && now < exp) {
validToken = true;
} else {
console.log("Stored access token is expired");
}
} catch (e) {
console.log("Unable to parse stored access token");
}
} else {
console.log("No access token found");
}
if (!validToken) {
acquireAccessToken();
}
}
function acquireAccessToken() {
console.log("Acquiring a new access token");
var jwt = getRequestJwt();
console.log(jwt);
var tid = pm.environment.get('ConsumingTenantId');
const tokenRequest = {
url: `https://login.microsoftonline.com/${tid}/oauth2/v2.0/token`,
method: 'POST',
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: {
mode: 'urlencoded',
urlencoded: [
{ key: 'client_assertion_type', value: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer' },
{ key: 'client_assertion', value: jwt },
{ key: 'client_id', value: pm.environment.get('ClientID') },
{ key: 'scope', value: 'https://graph.microsoft.com/.default' },
{ key: 'grant_type', value: 'client_credentials' }
]
}
};
pm.sendRequest(tokenRequest, (error, response) => {
if (error) {
console.log('Unable to acquire token: ' + error);
} else {
var responseJson = response.json();
var token = responseJson.access_token;
if (!token)
throw Error("Invalid or no access token received");
pm.environment.set('AppOnlyCertGraphToken', token);
}
});
}
function getRequestJwt () {
var header = {
'alg': 'RS256',
'typ': 'JWT',
'x5t': safeBase64EncodedThumbprint(pm.environment.get('CertThumbprint'))
};
var now = getTimeInSec();
var tid = pm.environment.get('ConsumingTenantId');
var payload = {
'aud': `https://login.microsoftonline.com/${tid}/oauth2/v2.0/token`,
'exp': now + 60 * 60,
'iss': pm.environment.get('ClientID'),
'jti': pm.variables.replaceIn('{{$guid}}'),
'nbf': now,
'sub': pm.environment.get('ClientID'),
'iat': now
};
var encryptedPk = pm.environment.get('CertPrivateKey');
var decryptedPk = encryptedPk;
if (pm.environment.has('CertPassword') && pm.environment.get('CertPassword') !== '') {
decryptedPk = KEYUTIL.getKey(encryptedPk, pm.environment.get('CertPassword'));
}
var sHeader = JSON.stringify(header);
var sPayload = JSON.stringify(payload);
return KJUR.jws.JWS.sign(header.alg, sHeader, sPayload, decryptedPk);
}
function getTimeInSec() {
return Math.floor(Date.now() / 1000);
}
function safeBase64EncodedThumbprint (thumbprint) {
var numCharIn128BitHexString = 128/8*2;
var numCharIn160BitHexString = 160/8*2;
var thumbprintSizes = {};
thumbprintSizes[numCharIn128BitHexString] = true;
thumbprintSizes[numCharIn160BitHexString] = true;
var thumbprintRegExp = /^[a-f\d]*$/;
var hexString = thumbprint.toLowerCase().replace(/:/g, '').replace(/ /g, '');
if (!thumbprintSizes[hexString.length] || !thumbprintRegExp.test(hexString)) {
throw 'The thumbprint does not match a known format';
}
var base64 = (Buffer.from(hexString, 'hex')).toString('base64');
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
}
var navigator = {}; // fake a navigator object for the lib
var window = {}; // fake a window object for the lib
eval(pm.globals.get('jsrsasign-js'));
ensureAccessToken();
Hinweis
Dieses Skript verwendet die Umgebungsvariablen zur Authentifizierung mit der Microsoft Entra-ID, um ein reines App-Token für Microsoft Graph abzurufen und in einer neuen oder vorhandenen Variablen namens AppOnlyCertGraphToken
zu speichern. Dies muss mithilfe eines Skripts erfolgen, da Postman den OAuth2-Clientanmeldeinformationsflow nicht unterstützt, indem anstelle eines geheimen Clientschlüssels ein Clientzertifikat verwendet wird.
Wenn nun eine Anforderung aus dem Ordner Anwendungscontainer > ausgeführt wird, ruft das Pre-Script der Anforderung ein Token ab, aktualisiert die Umgebungsvariable, die auf der Registerkarte Autorisierung des übergeordneten Anwendungsordners festgelegt ist, und führt dann die Anforderung aus. Da sich die Anforderung im Ordner Container befindet, in dem die Registerkarte Autorisierung auf erben vom übergeordneten Element festgelegt ist, wird die zurückgesetzte Authentifizierungskonfiguration abgerufen.
Speichern Sie die Änderungen an der Auflistung.
An diesem Punkt ist Postman jetzt so konfiguriert, dass ein reines App-Zugriffstoken für Aufrufe an Microsoft Graph abgerufen wird.
Registrieren des Containertyps bei Ihrem verbrauchenden Mandanten
Nachdem Postman konfiguriert ist, können Sie jetzt eine Anforderung hinzufügen, um den Containertyp bei Ihrem nutzenden Mandanten zu registrieren.
Wählen Sie in Postman im linken Navigationsbereich Sammlungen aus, erweitern Sie den Knoten SharePoint Embedded-Anwendung>, wählen Sie das Kontextmenü ... auf dem Knoten Container und dann Anforderung hinzufügen aus.
Benennen Sie die Anforderung in Containertyp registrieren um.
Legen Sie die HTTP-Methode auf PUT und den folgenden Endpunkt fest:
{{RootSiteURL}}/_api/v2.1/storageContainerTypes/{{ContainerTypeId}}/applicationPermissions
Fügen Sie im Skript vor der Anforderung den folgenden Code hinzu, um ein reines App-Token zum Aufrufen der SharePoint-REST-API abzurufen:
async function ensureAccessToken () {
var validToken = false;
var token = pm.environment.get('AppOnlyCertSPOToken');
if (token) {
console.log('checking stored token');
try {
var tokenObj = KJUR.jws.JWS.parse(token);
var nbf = tokenObj.payloadObj.nbf;
var exp = tokenObj.payloadObj.exp;
var now = getTimeInSec();
if (nbf <= now && now < exp) {
validToken = true;
} else {
console.log("Stored access token is expired");
}
} catch (e) {
console.log("Unable to parse stored access token");
}
} else {
console.log("No access token found");
}
if (!validToken) {
acquireAccessToken();
}
}
function acquireAccessToken() {
console.log("Acquiring a new access token");
var jwt = getRequestJwt();
console.log(jwt);
var tid = pm.environment.get('ConsumingTenantId');
const tokenRequest = {
url: `https://login.microsoftonline.com/${tid}/oauth2/v2.0/token`,
method: 'POST',
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: {
mode: 'urlencoded',
urlencoded: [
{ key: 'client_assertion_type', value: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer' },
{ key: 'client_assertion', value: jwt },
{ key: 'client_id', value: pm.environment.get('ClientID') },
{ key: 'scope', value: pm.environment.get('RootSiteURL') + '/.default' },
{ key: 'grant_type', value: 'client_credentials' }
]
}
};
pm.sendRequest(tokenRequest, (error, response) => {
if (error) {
console.log('Unable to acquire token: ' + error);
} else {
var responseJson = response.json();
var token = responseJson.access_token;
pm.environment.set('AppOnlyCertSPOToken', token);
}
});
}
function getRequestJwt () {
var header = {
'alg': 'RS256',
'typ': 'JWT',
'x5t': safeBase64EncodedThumbprint(pm.environment.get('CertThumbprint'))
};
var now = getTimeInSec();
var tid = pm.environment.get('ConsumingTenantId');
var payload = {
'aud': `https://login.microsoftonline.com/${tid}/oauth2/v2.0/token`,
'exp': now + 60 * 60,
'iss': pm.environment.get('ClientID'),
'jti': pm.variables.replaceIn('{{$guid}}'),
'nbf': now,
'sub': pm.environment.get('ClientID'),
'iat': now
};
var encryptedPk = pm.environment.get('CertPrivateKey');
var decryptedPk = encryptedPk;
if (pm.environment.has('CertPassword') && pm.environment.get('CertPassword') !== '') {
decryptedPk = KEYUTIL.getKey(encryptedPk, pm.environment.get('CertPassword'));
}
var sHeader = JSON.stringify(header);
var sPayload = JSON.stringify(payload);
return KJUR.jws.JWS.sign(header.alg, sHeader, sPayload, decryptedPk);
}
function getTimeInSec() {
return Math.floor(Date.now() / 1000);
}
function safeBase64EncodedThumbprint (thumbprint) {
var numCharIn128BitHexString = 128/8*2;
var numCharIn160BitHexString = 160/8*2;
var thumbprintSizes = {};
thumbprintSizes[numCharIn128BitHexString] = true;
thumbprintSizes[numCharIn160BitHexString] = true;
var thumbprintRegExp = /^[a-f\d]*$/;
var hexString = thumbprint.toLowerCase().replace(/:/g, '').replace(/ /g, '');
if (!thumbprintSizes[hexString.length] || !thumbprintRegExp.test(hexString)) {
throw 'The thumbprint does not match a known format';
}
var base64 = (Buffer.from(hexString, 'hex')).toString('base64');
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
}
var navigator = {}; // fake a navigator object for the lib
var window = {}; // fake a window object for the lib
eval(pm.globals.get('jsrsasign-js'));
ensureAccessToken();
Legen Sie auf der Registerkarte Autorisierung den Typ auf Bearertoken und das Token auf fest {{AppOnlyCertSPOToken}}
. Diese Tokenvariable wird im Skript vor der Anforderung erstellt und festgelegt.
Wählen Sie auf der Registerkarte Text den unformatierten Typ aus, legen Sie den Datentyp auf JSON fest, und fügen Sie dem Text den folgenden Code hinzu:
{
"value": [
{
"appId": "{{ClientID}}",
"delegated": ["full"],
"appOnly": ["full"]
}
]
}
Wählen Sie die Schaltfläche Senden aus, um die Anforderung Containertyp registrieren auszuführen. Postman zeigt die Antwort unterhalb der Anforderung an:
Zusammenfassung
In dieser Übung haben Sie eine Microsoft Entra ID-Anwendung erstellt, SharePoint Embedded auf Ihrem Microsoft 365 SharePoint-Mandanten eingerichtet und Ihren ersten Containertyp mithilfe von PowerShell, einer neuen Postman-Sammlung und einer zugehörigen Umgebung zum Übermitteln von Anforderungen an Microsoft Graph- und SharePoint-REST-APIs erstellt.