SharePoint Embedded の設定と構成

完了

この演習では、Microsoft Entra ID アプリケーションを作成し、Microsoft 365 SharePoint テナントに SharePoint Embedded を設定し、最初のコンテナーの種類とコンテナーを作成します。

前提条件

Microsoft Entra ID アプリケーションを登録する

カスタム SharePoint Embedded アプリケーションでは、カスタム Microsoft Entra ID アプリケーションを使用して、Microsoft Graph と Microsoft SharePoint API を呼び出すために必要なアクセス許可を認証および取得します。

ブラウザーを開き、 Microsoft Entra ID 管理者の Enter に移動します。 グローバル管理者権限を持つ Microsoft 365 テナントの 職場または学校アカウント を使用してサインインします。

左側のナビゲーションで [ Identity > Applications > App registrations]\(ID アプリケーション アプリの登録 \) を選択し、[ 新しい登録] を選択します。

アプリ登録用の Microsoft Entra ID 管理センターのスクリーンショット

[アプリケーションを登録] ページで次のように値を設定し、[登録] を選択します。

  • 名前: SharePoint Embedded アプリ
  • サポートされているアカウントの種類: 任意の組織のディレクトリ内のアカウント (任意の Microsoft Entra ID テナント - Multitenant)

[アプリケーションを登録] ページのスクリーンショット。

SharePoint Embedded アプリを作成すると、Microsoft Entra ID に新しいアプリの詳細が表示されます。 このモジュールの後半で必要になる複数の値を追跡するテキスト ファイルを作成します。

アプリケーション (クライアント) ID & ディレクトリ (テナント) ID をアプリの概要ページからローカル テキスト ファイルにコピーします。

新しいアプリ登録のアプリケーション ID とテナント ID のスクリーンショット。

認証を構成する

次に、アプリの認証設定を行います。 左側のナビゲーションから [認証の管理>] を選択し、[プラットフォームの追加] を選択します。

アプリの [認証] ページのスクリーンショット。

[Web] オプションを選択し、[リダイレクト URI] に「」と入力https://oauth.pstmn.io/v1/callbackして [構成] を選択します

次に、[新しい Web プラットフォームの URI の追加] を選択し、[https://oauth.pstmn.io/v1/browser-callback構成] を選択します

この 2 つのオプションは、このモジュールの後半で Postman クライアントを使用してアクセス トークンを認証および取得するために使用されます。

Web プラットフォームに 2 つ目のリダイレクト URI を追加するスクリーンショット。

[ 暗黙的な許可とハイブリッド フロー ] セクションまで下にスクロールし、[ アクセス トークン (暗黙的なフローに使用)] オプションを選択し、[保存] を選択 します。

[ プラットフォームの追加]、[ シングルページ アプリケーション] の順に選択して別のプラットフォームを追加し、[ リダイレクト URI] をhttp://localhost設定し、[構成] を選択 します

API のアクセス許可を構成する

次に、コンテナーの種類とコンテナーを作成してアクセスできるように、より多くのアクセス許可を持つアプリを構成します。

注:

公開時に、必要なアクセス許可は、Microsoft Entra ID 管理センターの API セレクターにまだ表示されません。 アクセス許可を追加するには、 FileStorageContainer.Selected Microsoft Graph と Container.Selected SharePoint の場合は、アクセス許可 ID によってアプリのマニフェストに直接追加します。

左側のナビゲーションから [マニフェストの管理>] を選択します。 プロパティ requiredResourceAccess を見つけて、次の JSON のように編集します。

"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"
      }
    ]
  }
],

重要

同じ resourceAppIdsを使用して重複するオブジェクトを作成しないでください。 代わりに、 オブジェクトを既存 resourceAppIdsの に追加します。 たとえば、 が既に requiredResourceAccess 次に設定されている場合は、次のようになります。

"requiredResourceAccess": [
 {
   "resourceAppId": "00000003-0000-0000-c000-000000000000",
   "resourceAccess": [
     {
       "id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d",
       "type": "Scope"
     }
   ]
 }
],

2 つの新しいアクセス許可を既存 "resourceAppId": "00000003-0000-0000-c000-000000000000" のオブジェクトに追加して、3 つの (3) アクセス許可を持つようになりました。

一部のアクセス許可には管理者の同意が必要です。 左側のナビゲーションで [ API アクセス許可] を 選択し、ページの下部までスクロールして、リンク [ エンタープライズ アプリケーション] を選択します。

[アクセス許可] ページで、[ Contoso に管理者の同意を付与する] を選択します。 サインインを求められたら、Microsoft Entra ID 管理センターへのサインインに使用したのと同じ 職場および学校 アカウントを使用します。 [アクセス許可が要求されました] ページで、[同意する] を選択して、Microsoft Graph と Container.Selected SharePoint の 2 組のアクセス許可FileStorageContainer.Selectedに管理者の同意を付与します。 2 つのペアは、2 つのアクセス許可ごとに委任されたオプション & アプリケーションを表します。

クライアント シークレットを作成する

アプリが Microsoft Entra ID を使用して OAuth2 クライアント資格情報フローを使用して認証するには、クライアント ID とクライアント シークレットの両方が必要です。

左側のナビゲーションから [証明書 & シークレットの管理>] を選択します。

[クライアント シークレット] の詳細ページで、[新しいクライアント シークレット] を選択します。 説明を追加し、有効期間を選択して、[追加] を選択します。

クライアント シークレットを作成すると 1 回表示されるので、このモジュールの後半で使用するために、ローカル テキスト ファイルのクライアント シークレットとしてコピーしてください。 この値をコピーしない場合、以前に作成したシークレットを表示することができないため、新たにシークレットを作成する必要があります。

証明書を作成する

クライアント ID とシークレットを使用したアプリ認証を許可する Microsoft Graph とは異なり、SharePoint では、クライアント ID と証明書を使用してアプリを認証する必要があります。 そのため、証明書を作成する必要があります。

管理者として Windows PowerShell プロンプトを開き、次の PowerShell スクリプトを実行します。 メッセージが表示されたら、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

PowerShell スクリプトは、証明書 (*.cer) と秘密キー (*.key) を、PowerShell スクリプトが実行されたフォルダーに保存します。

Microsoft Entra ID 管理センターのアプリの [証明書 & シークレット ] ページで、[ 証明書 ] を選択し、[ 証明書のアップロード] を選択します。

新しい証明書をアプリにアップロードするスクリーンショット。

*.cer PowerShell スクリプトによって生成された をアップロードし、証明書に説明を付けて、[追加] を選択します。

証明書がアップロードされたら、表示されている 拇印 全体をローカル テキスト ファイルにコピーします。

SharePoint Embedded アプリの新しいコンテナーの種類を作成する

次の手順では、アプリケーションのコンテナーの種類を作成します。

管理者として Windows PowerShell プロンプトを開きます。

SharePoint Online PowerShell モジュールをインストールまたはアップグレードする

SharePoint Online PowerShell モジュールをまだインストールしていない場合は、次のコマンドを実行してインストールします。

Install-Module "Microsoft.Online.SharePoint.PowerShell"

インストール済みの場合は、アップグレードして最新のインストール済みであることを確認します。

Upgrade-Module "Microsoft.Online.SharePoint.PowerShell"

注:

既にインストールされているかどうかわからない場合は、最初の Upgrade-Module を実行してみてください。 失敗した場合は、インストールされていないため、コマンドレットを実行します Install-Module

コンテナーの種類を作成する

最新の SharePoint Online PowerShell モジュール をインストールしたら、次の手順としてテナントにコンテナーの種類を作成します。

次の PowerShell スクリプトで次の値を更新し、スクリプトを実行します。

  • {{SPO_ADMIN_URL}}: これは SharePoint Online 管理センターの URL です。 これを取得するには、テナントの管理者アカウントの職場と学校で に[https://portal.microsoft.com](https://portal.microsoft.com)サインインし、左側のナビゲーションの下部にある [すべて表示] を選択し、[管理センター>] SharePoint を選択します。 SharePoint 管理センターの URL をコピーし、この値を使用します。 たとえば、テナント ID が Contoso123 の場合、管理者 URL は になります https://contoso123-admin.sharepoint.com
  • {{CONTAINER_TYPE_NAME}}: 新しいコンテナーの種類の名前を選択します。 たとえば、 を使用します FirstContainerType
  • {{AZURE_ENTRA_APP_ID}}: これを、以前に作成した "クライアント ID" とも呼ばれる Microsoft Entra ID アプリ ID の値に設定します。 この値は、ローカル テキスト ファイル内にある必要があります。
Import-Module "Microsoft.Online.SharePoint.PowerShell"
Connect-SPOService -Url "{{SPO_ADMIN_URL}}"
New-SPOContainerType -TrialContainerType -ContainerTypeName "{{CONTAINER_TYPE_NAME}}" -OwningApplicationId "{{AZURE_ENTRA_APP_ID}}"

PowerShell スクリプトには、次のように、新しいコンテナーの種類の詳細が表示されます。

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              :

後で ContainerTypeId 使用するために、 と ContainerTypeName をローカル テキスト ファイルにコピーします。

Microsoft Graph と SharePoint Online の委任トークンとアプリケーション アクセス トークンを取得するために、Microsoft Entra ID で認証するように Postman を構成する

最後の手順では、開発者/プロバイダー Microsoft 365 テナントで作成した新しいコンテナーの種類を、使用しているテナントに登録します。 これは、SharePoint REST API を使用して行います。 この手順では、Postman クライアントを使用します。

Postman で SharePoint REST API を呼び出すには、まずアクセス トークンを取得するように Postman を構成する必要があります。

新しい Postman 環境を作成する

まず、呼び出しを簡略化し、すべての設定を一元化するために環境変数を格納する新しい Postman 環境を作成します。

Postman で [ 環境] を選択し、プラスアイコンを選択して新しい環境を作成します。

新しい環境を作成する Postman のスクリーンショット。

環境に SharePoint Embedded という名前を付けます。

新しい Postman 環境のスクリーンショット。

次の変数を環境に追加し、ローカル テキスト ファイルから [初期値 ] を vales に設定します。 これらの変数を追加したら、環境を保存します。

変数 Notes
Clientid default Microsoft Entra ID 管理センターで以前に作成したアプリのクライアント/アプリケーション ID。 763cd5ea-ade4-4d2a-a143-29498920e18f
ClientSecret 秘密 Microsoft Entra ID 管理センターで以前に作成したアプリのクライアント シークレット。 JXZ8Q........jbvanC
ConsumingTenantId default Microsoft Entra ID 管理センターで以前に作成したアプリのテナント/ディレクトリ ID (GUID)。 4c57ca2e-a63d-4999-9b69-610a7296e89b
RootSiteURL default 末尾のスラッシュを使用しない SharePoint Online テナントの URL。 これは、-admin 文字列を含まない SharePoint Online 管理センター URL と同じです。 https://contoso123.sharepoint.com
ContainerTypeId default 前に作成したコンテナーの種類の ID 3a6b1fc4-0bd9-04b3-3a2a-4843fbb60914
TenantName default SharePoint Online テナントの ID。 これは、-admin 文字列を含まない SharePoint Online 管理センター URL の最初の部分です。 contoso123
CertThumbprint default Microsoft Entra ID 管理センターで作成したアプリ用に以前にアップロードした証明書の拇印。 905EEA21C472368A36ADEDB26CCE6E760049BC1E
CertPrivateKey 秘密 証明書の秘密キー。 前に実行した PowerShell スクリプトによって生成された *.key ファイル (証明書の -----begin と終了区切り記号など) から内容全体をコピーします。 ----BEGIN 秘密キー----- ... -----END 秘密キー---—
ContainerID default 空白のままにします。 これは後で使用します。

入力された Postman 環境のスクリーンショット。

Postman クライアントの右上にあるドロップダウン セレクターで環境を選択します。 ドロップダウンは、歯車アイコンとアラート アイコンのすぐ下にあり、タブと同じ行の [保存] ボタンと [共有 ] ボタンの上にあります。

新しい Postman コレクションを作成する

次に、要求を格納し、アクセス トークンを取得する新しい Postman コレクションを作成します。

Postman で [ コレクション] を選択し、プラスアイコンを選択して新しいコレクションを作成します

コレクションに SharePoint Embedded という名前を付けます。

新しいコレクションで、 を作成して、コレクションのコンテキスト many を使用してフォルダーのセットを作成し、コンテナーの要求を格納 します。1 つは 委任された フォルダーに、もう 1 つは Application フォルダーにあります。

新しい Postman コレクション内のフォルダーのスクリーンショット。

Postman コレクションの Application フォルダーを構成する

次の手順では、 アプリケーション フォルダーの認証設定を更新します。 これは、Microsoft Graph を呼び出すためにアプリ専用トークンを取得する必要があるため、もう少し作業が必要です。 これを行うには、スクリプトをダウンロードし、後で使用するためにグローバル変数に格納するように Application フォルダーを構成します。

[アプリケーション] フォルダーを選択し、[承認] タブを選択します。Typeベアラー トークンに、トークンを に{{AppOnlyCertGraphToken}}設定します。

注:

Postman では、次のように検証エラーが表示されます。 これは想定されており、現時点では無視できます。 この変数は、スクリプトを使用して一瞬で作成されます。

[ 要求前スクリプト ] タブを選択し、次のスクリプトを入力します。

// 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());
      }
    }
  );
}

コレクションへの変更を保存します。

Postman コレクションの Application >Containers フォルダーを構成する

次に、コレクションの Application Containers フォルダーを>選択します。

[ 承認 ] タブで、[ 種類 ] を [ 親から認証を継承する] に設定します。

[ 事前要求スクリプト ] タブで、次のスクリプトを入力します。

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();

注:

このスクリプトでは、環境変数を使用して Microsoft Entra ID で認証を行い、Microsoft Graph のアプリ専用トークンを取得し、 という名前 AppOnlyCertGraphTokenの新しい変数または既存の変数に格納します。 Postman はクライアント シークレットではなくクライアント証明書を使用する OAuth2 クライアント資格情報フローをサポートしていないため、これはスクリプトを使用して行う必要があります。

ここで、 要求が Application > Containers フォルダーから実行されると、要求の事前スクリプトがトークンを取得し、親 アプリケーション フォルダーの [承認] タブで設定されている環境変数を更新してから、要求を実行します。 要求は、親から継承するように [承認] タブが設定されている Containers フォルダーにあるため、リセットされた認証構成が取得されます。

コレクションへの変更を保存します。

この時点で、Postman は、Microsoft Graph への呼び出し用のアプリ専用アクセス トークンを取得するように構成されました。

コンテナーの種類を使用しているテナントに登録する

Postman が構成された状態で、コンテナーの種類を使用しているテナントに登録する要求を追加できるようになりました。

Postman で、左側のナビゲーションから [コレクション] を選択し、[SharePoint Embedded > Application] ノードを展開し、[コンテナー] ノードで ... コンテキスト メニューを選択し、[要求の追加] を選択します。

要求の名前を [コンテナーの種類の登録] に変更します

HTTP メソッドを PUT に設定し、次のエンドポイントを設定します。

{{RootSiteURL}}/_api/v2.1/storageContainerTypes/{{ContainerTypeId}}/applicationPermissions

[事前要求スクリプト] で、次のコードを追加して、SharePoint REST API を呼び出すアプリ専用トークンを取得します。

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();

[ 承認 ] タブで、[ 種類 ] を [ベアラー トークン ] に、[ トークン ] を に {{AppOnlyCertSPOToken}}設定します。 このトークン変数は、事前要求スクリプトで作成および設定されます。

[ 本文 ] タブで 、生 の種類を選択し、データの種類を JSON に設定し、本文に次のコードを追加します。

{
  "value": [
    {
      "appId": "{{ClientID}}",
      "delegated": ["full"],
      "appOnly": ["full"]
    }
  ]
}

コンテナーの種類の登録要求のスクリーンショット

[ 送信 ] ボタンを選択して、 コンテナーの種類の登録 要求を実行します。 Postman は、要求の下に応答を表示します。

Microsoft 365 使用テナントにコンテナーの種類を登録するに成功した応答のスクリーンショット。

概要

この演習では、Microsoft Entra ID アプリケーションを作成し、Microsoft 365 SharePoint テナントに SharePoint Embedded をセットアップし、PowerShell、新しい Postman コレクション、および関連する環境を使用して最初のコンテナーの種類を作成して、Microsoft Graph と SharePoint REST API に要求を送信しました。

自分の知識をチェックする

1.

SharePoint Embedded アプリケーションのコンテナーの種類の正しいロールは次のうちどれですか?

2.

プロバイダーのテナントでコンテナーの種類が作成された後、コンシューマー テナント管理者は何を行う必要がありますか?

3.

SharePoint Embedded のコンテナー レベルで適用できるさまざまなロールは何ですか?