英語で読む

次の方法で共有


SAP Gateway for Microsoft を使用して SAP データにアクセスするプロバイダー向けのホスト型 SharePoint アドインを作成します。

SAP Gateway for Microsoft および Azure Active Directory Authentication Library for .NET を使用すると、SAP データの読み書き、およびオプションで SharePoint データの読み書きを行う SharePoint アドインを作成できます。 この記事では、SAP への承認されたアクセスを行う SharePoint アドインを設計する手順について説明します。

前提条件

この記事の手順に関する前提条件を以下に示します。

SAP Gateway for Microsoft と SharePoint の認証と承認について

Azure AD で OAuth 2.0 を使用すると、アプリケーションは Azure でホストされる複数のリソースにアクセスできるようになります。SAP Gateway for Microsoft は、そのうちの 1 つです。 OAuth 2.0 では、ユーザーに加えて、アプリケーションもセキュリティ プリンシパルです。 アプリケーション プリンシパルでは、ユーザーに加えて (場合によってはユーザーの代わりに)、保護されたリソースに対する認証と承認が必要です。

このプロセスには、OAuth "フロー" が含まれます。アプリケーションは、SharePoint アドインである可能性があり、Azure AD を OAuth 2.0 承認サーバーとして使用するように構成されているすべての Azure でホストされるサービスとアプリケーションによって受け入れられるアクセス トークン (および更新トークン) を取得します。 このプロセスは、「低信頼の承認とその子記事を使用する SharePoint アドインの作成」の説明に従って、プロバイダーホスト型 SharePoint アドインのリモート コンポーネントが SharePoint に承認 を取得する方法とよく似ています。 ただし、ACS 承認システムでは、Azure AD ではなく信頼されたトークン発行者として Azure Access Control Service (ACS) が使用されます。

ヒント

SharePoint アドインが SAP Gateway for Microsoft だけでなく SharePoint にもアクセスする場合、SAP Gateway for Microsoft へのアクセス トークンを取得するための Azure AD と、SharePoint へのアクセス トークンを取得するための ACS 承認システムの両方のシステムが必要になります。 これら 2 つのソースからのトークンには、互換性がありません。 詳細については、「SharePoint アクセスを ASP.NET アプリケーションに追加する (オプション)」を参照してください。

重要

Azure Active Directory (Azure AD) のサービスである Azure アクセス制御 (ACS) は、2018 年 11 月 7 日に廃止されます。 SharePoint アドイン モデルでは、(この廃止の影響を受けない) https://accounts.accesscontrol.windows.net ホスト名を使用しているため、この廃止による影響はありません。 詳細については、「SharePoint アドインに対する Azure アクセス制御の終了の影響」を参照してください。

Azure AD の OAuth 2.0 で使用される OAuth フローの詳細な説明および図については、「OAuth 2.0 と Azure Active Directory を使用した Web アプリケーションへのアクセスの承認」を参照してください。

SharePoint へのアクセスのフローに関する類似の説明と図については、「コンテキスト トークン フローの手順」を参照してください。

SharePoint アドインを作成する

Visual Studio ソリューションを作成する

  1. 以下の手順に従って、SharePoint アドインのプロジェクトを Visual Studio で作成します (この記事の一連の例では、C# を使用することを想定していますが、新規プロジェクト テンプレートの [Visual Basic] セクションで SharePoint アドインのプロジェクトを開始することもできます)。

    1. [新しい SharePoint アドイン] ウィザードでプロジェクトに名前を付け、[OK] を選択します。 このトピックの例では、SAP2SharePoint を使用します。
    2. デバッグ サイトとして Office 365 開発者向けサイトのドメイン URL を指定します (末尾のスラッシュも含めます)。たとえば https://<O365_domain>.sharepoint.com/ と指定します。 アドインの種類として [プロバイダー向けのホスト型] を指定します。[次へ] をクリックします。
    3. プロジェクトの種類を選択します。 このトピックの例では、[ASP.NET Web フォーム アプリケーション] を選択します (SAP Gateway for Microsoft にアクセスする ASP.NET MVC アプリケーションを作成することもできます)。[次へ] を選択します。
    4. Azure ACS を認証システムとして選択します (SharePoint アドインは、SharePoint にアクセスする場合にこのシステムを使用します。SAP Gateway for Microsoft にアクセスする場合、このシステムは使用されません)。[ 完了] を選択します
  2. プロジェクトが作成された後、Office 365 アカウントにログインするように求めるプロンプトが表示されます。 アカウント管理者の資格情報を使用します (たとえば、Bob@<O365_domain>.onmicrosoft.com)。

  3. Visual Studio ソリューションには、SharePoint アドインの固有のプロジェクトと ASP.NET Web フォーム プロジェクトの 2 つのプロジェクトがあります。 次の手順で 、Microsoft Authentication Library (MSAL) パッケージを ASP.NET プロジェクトに追加します。

    1. ASP.NET プロジェクト (この一連の例では SAP2SharePointWeb) の [参照] フォルダーを右クリックして、[NuGet パッケージの管理] を選択します。
    2. 開いたダイアログの左側にある [オンライン] を選択します。 検索ボックス に「Microsoft.Identity.Client 」と入力します。
    3. 検索結果に MSAL ライブラリが表示されたら、[ インストール ] ボタンを選択し、メッセージが表示されたらライセンスに同意します。
  4. 次の手順を使用して、Json.net パッケージを ASP.NET プロジェクトに追加します。

    1. 検索ボックスに「Json.net」と入力します。 検索がヒットする数が多すぎる場合は、「Newtonsoft.json」を検索してみてください。
    2. 検索結果に Json.net が表示されたら、[インストール] ボタンを選択します。
  5. [閉じる] を選択します。

Web アプリケーションを Azure AD に登録する

  1. Azure 管理者アカウントを使用して、Azure portal にサインインします。

注意

セキュリティ上の理由から、アドインの開発時に管理者アカウントを使用することはお勧めしません。

  1. 左側の [Active Directory] を選択します。

  2. ご使用のディレクトリを選択します。

  3. [アプリケーション] (上部のナビゲーション バーにあります) を選択します。

  4. 画面下部にあるツールバーで [追加] を選択します。

  5. 表示されるダイアログで、[組織が開発中のアプリケーションを追加] を選択します。

  6. [アプリケーションの追加] ダイアログで、アプリケーションに名前を付けます。 この記事の例では、「ContosoAutomobileCollection」を使用します。

  7. アプリケーションの種類として、[Web アプリケーションまたは Web API] を選択してから、右矢印ボタンを選択します。

  8. ダイアログの 2 番目のページで、[サインオン URL] として Visual Studio ソリューションの ASP.NET プロジェクトから SSL デバッグ URL を使用します。 次の手順を使用して URL を見つけることができます (Visual Studio デバッガー (F5) を実行できるように、最初にアドインをデバッグ URL に登録する必要があります。 アドインをステージングする準備ができたら、そのステージング Azure Web サイト URL に再登録します。 「アドインを変更し、Azure とOffice 365にステージングする」を参照してください)。

    1. ソリューション エクスプローラーで ASP.NET プロジェクトを強調表示にします。
    2. [プロパティ] ウィンドウで [SSL URL] プロパティの値をコピーします (たとえば https://localhost:44300/)。
    3. その値を [アプリケーションの追加] ダイアログの [サインオン URL] に貼り付けます。
  9. [アプリケーション ID/URI] では、アプリケーションに一意の URI を指定します。たとえば、https://localhost:44300/ContosoAutomobileCollection のように、SSL URL の末尾にアプリケーション名を追加します。

  10. チェックマーク ボタンを選択します。 アプリケーションの Azure ダッシュボードが開き、成功を示すメッセージが表示されます。

  11. ページ上部で [構成] を選択します。

  12. [クライアント ID] までスクロールし、その値をコピーしておきます。 これは後続の手順で必要になります。

  13. [キー] セクションでキーを作成します。 このキーは、最初は表示されません。 ページ下部にある [保存] をクリックすると、キーが表示されます。 そのキーをコピーします。 これは後続の手順で必要になります。

  14. [他のアプリケーションに対するアクセス許可] までスクロールし、SAP Gateway for Microsoft サービス アプリケーションを選択します。

  15. [デリゲートされたアクセス許可] ドロップダウン リストを開き、SharePoint アドインが必要とする SAP Gateway for Microsoft サービスへのアクセス許可のボックスを有効にします。

  16. 画面下部にある [保存] を選択します。

Azure AD と通信するようにアプリケーションを構成する

  1. Visual Studio で、ASP.NET プロジェクト内の web.config ファイルを開きます。
  2. Office Developer Tools for Visual Studio により、<appSettings> セクションに SharePoint アドインの ClientID および ClientSecret の要素が既に追加されています (これらは、ASP.NET アプリケーションが SharePoint にアクセスする場合、Azure ACS 承認システムで使用されます。引き続き使用する例では無視できますが、削除することはできません。プロバイダーホスト型 SharePoint アドインでは、アドインが SharePoint データにアクセスしていない場合でも必要です。これらの値は、Visual Studio で F5 を選択するたびに変更されます)。

以下の 2 つの要素をセクションに追加します。 これらは、アプリケーションにより、Azure AD に対する認証のために使用されます (OAuth ベースの認証および承認システムでは、ユーザーと同様、アプリケーションもセキュリティ プリンシパルであることを思い出してください)。

<add key="ida:ClientID" value="" />
<add key="ida:ClientKey" value="" />
  1. 前の手順で Azure AD ディレクトリから保存したクライアント ID を、ida:ClientID キーの値として挿入します。 大文字小文字および句読点は、コピーしたままの状態にし、値の先頭および末尾にスペース文字を含めないように注意します。 ida:ClientKey キーの場合は、ディレクトリから保存したキーを使用します。 ここでも、スペース文字を含めないように、また何も変更しないように注意します。 これで、<appSettings> セクションは、次のようになります (ClientId 値は、GUID または空の文字列に設定されます)。

    <appSettings>
      <add key="ClientId" value="" />
      <add key="ClientSecret" value="LypZu2yVajlHfPLRn5J2hBrwCk5aBOHxE4PtKCjIQkk=" />
      <add key="ida:ClientID" value="4da99afe-08b5-4bce-bc66-5356482ec2df" />
      <add key="ida:ClientKey" value="URwh/oiPay/b5jJWYHgkVdoE/x7gq3zZdtcl/cG14ss=" />
    </appSettings>
    

    注意

    Azure AD は、登録する際に使用した "localhost" URL によりアプリケーションを判別します。 クライアント ID とクライアント キーは、この ID と関連付けられています。 アプリケーションを Azure Web サイトにステージングする準備が整ったら、新しい URL で再登録します。

  2. appSettings セクションで、Authority キーを追加し、その値を組織アカウントの Office 365 ドメイン (some_domain.onmicrosoft.com) に設定します。 このトピックの例では、組織アカウントは Bob@<O365_domain>.onmicrosoft.com なので、Authority は <O365_domain>.onmicrosoft.com になります。

    <add key="Authority" value="<O365_domain>.onmicrosoft.com" />
    
  3. appSettings セクションで、AppRedirectUrl キーを追加し、その値を、ASP.NET アドインが認証コードを Azure AD から取得した後にユーザーのブラウザーがリダイレクトされるページに設定します。 通常これは、Azure AD への呼び出しが実行されたときにユーザーがいたのと同じページです。 このトピックの例では、以下のように SSL URL 値に "/Pages/Default.aspx" が付加された値が使用されます (これは、ステージング用に変更するのとは別の値です)。

    <add key="AppRedirectUrl" value="https://localhost:44322/Pages/Default.aspx" />
    
  4. 引き続き appSettings セクションで ResourceUrl キーを追加し、その値を SAP Gateway for Microsoft のアプリ ID URI (ASP.NET アプリケーションの APP ID URI ではなく ) に設定します。 この値は SAP Gateway for Microsoft 管理者から入手します。 次に例を示します。

    <add key="ResourceUrl" value="http://<SAP_gateway_domain>.cloudapp.net/" />
    

    <appSettings> セクションは、次のようになります。

    <appSettings>
      <add key="ClientId" value="06af1059-8916-4851-a271-2705e8cf53c6" />
      <add key="ClientSecret" value="LypZu2yVajlHfPLRn5J2hBrwCk5aBOHxE4PtKCjIQkk=" />
      <add key="ida:ClientID" value="4da99afe-08b5-4bce-bc66-5356482ec2df" />
      <add key="ida:ClientKey" value="URwh/oiPay/b5jJWYHgkVdoE/x7gq3zZdtcl/cG14ss=" />
      <add key="Authority" value="<O365_domain>.onmicrosoft.com" />
      <add key="AppRedirectUrl" value="https://localhost:44322/Pages/Default.aspx" />
      <add key="ResourceUrl" value="http://<SAP_gateway_domain>.cloudapp.net/" />
    </appSettings>
    
  5. web.config ファイルを保存して閉じます。

    ヒント

    Visual Studio デバッガー (F5) を実行するときに、web.config ファイルを開いたままにしないでください。 F5 キーを押すたびに、Office Developer Tools for Visual Studio は、ClientId 値 (ida:ClientID ではありません) を変更します。 ファイルが開いていると、デバッグを実行する前に、プロンプトに応答して web.config ファイルを再度読み込む必要が生じます。

Azure AD を認証するためのヘルパー クラスを追加する

  1. ASP.NET プロジェクトを右クリックし、Visual Studio 項目追加プロセスを使用して、新しいクラス ファイルを AADAuthHelper.cs という名前のプロジェクトに追加します。

  2. 以下の using ステートメントをファイルに追加します。

    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    using System.Configuration;
    using System.Web.UI;
    
  3. アクセス キーワードを public から internal に変更し、static キーワードをクラス宣言に追加します。

    internal static class AADAuthHelper
    
  4. 次のフィールドをクラスに追加します。 これらのフィールドには、ASP.NET アプリケーションで Azure AD からアクセス トークンを取得するために使用される情報が格納されます。

    private static readonly string _authority = ConfigurationManager.AppSettings["Authority"];
    private static readonly string _appRedirectUrl = ConfigurationManager.AppSettings["AppRedirectUrl"];
    private static readonly string _resourceUrl = ConfigurationManager.AppSettings["ResourceUrl"];
    private static readonly string _clientId = ConfigurationManager.AppSettings["ida:ClientID"];
    private static readonly ClientCredential _clientCredential = new ClientCredential(
                              ConfigurationManager.AppSettings["ida:ClientID"],
                              ConfigurationManager.AppSettings["ida:ClientKey"]);
    
    private static readonly AuthenticationContext _authenticationContext =
                new AuthenticationContext("https://login.windows.net/common/" +
                                          ConfigurationManager.AppSettings["Authority"]);
    
  5. 次に示すプロパティをクラスに追加します。 このプロパティは、Azure AD サインイン画面への URL を保持します。

    private static string AuthorizeUrl
    {
      get
      {
        return string.Format("https://login.windows.net/{0}/oauth2/authorize?response_type=code&amp;redirect_uri={1}&amp;client_id={2}&amp;state={3}",
            _authority,
            _appRedirectUrl,
            _clientId,
            Guid.NewGuid().ToString());
      }
    }
    
  6. 次のプロパティをクラスに追加します。 これらは、アクセス トークンおよびリフレッシュ トークンをキャッシュし、それらの有効性を確認します。

    public static Tuple<string, DateTimeOffset> AccessToken
    {
      get {
        return HttpContext.Current.Session["AccessTokenWithExpireTime-" + _resourceUrl]
            as Tuple<string, DateTimeOffset>;
      }
    
      set { HttpContext.Current.Session["AccessTokenWithExpireTime-" + _resourceUrl] = value; }
    }
    
    private static bool IsAccessTokenValid
    {
      get
      {
        return AccessToken != null
          && !string.IsNullOrEmpty(AccessToken.Item1)
          && AccessToken.Item2 > DateTimeOffset.UtcNow;
      }
    }
    
    private static string RefreshToken
    {
      get { return HttpContext.Current.Session["RefreshToken" + _resourceUrl] as string; }
      set { HttpContext.Current.Session["RefreshToken-" + _resourceUrl] = value; }
    }
    
    private static bool IsRefreshTokenValid
    {
      get { return !string.IsNullOrEmpty(RefreshToken); }
    }
    
  7. 次のメソッドをクラスに追加します。 これらは、認証コードの有効性を確認し、認証コードまたは更新トークンを使用して Azure AD からアクセス トークンを取得するために使用されます。

    private static bool IsAuthorizationCodeNotNull(string authCode)
    {
      return !string.IsNullOrEmpty(authCode);
    }
    
    private static Tuple<Tuple<string,DateTimeOffset>,string> AcquireTokensUsingAuthCode(string authCode)
    {
      var authResult = _authenticationContext.AcquireTokenByAuthorizationCode(
                  authCode,
                  new Uri(_appRedirectUrl),
                  _clientCredential,
                  _resourceUrl);
    
      return new Tuple<Tuple<string, DateTimeOffset>, string>(
                  new Tuple<string, DateTimeOffset>(authResult.AccessToken, authResult.ExpiresOn),
                  authResult.RefreshToken);
    }
    
    private static Tuple<string, DateTimeOffset> RenewAccessTokenUsingRefreshToken()
    {
      var authResult = _authenticationContext.AcquireTokenByRefreshToken(
                          RefreshToken,
                          _clientCredential.OwnerId,
                          _clientCredential,
                          _resourceUrl);
    
      return new Tuple<string, DateTimeOffset>(authResult.AccessToken, authResult.ExpiresOn);
    }
    
  8. クラスに、次のメソッドを追加します。 これは、SAP Gateway for Microsoft を介して SAP データを取得する呼び出しを実行する前に、有効なアクセス トークンを取得するため、ASP.NET 分離コードから呼び出されます。

    internal static void EnsureValidAccessToken(Page page)
    {
      if (IsAccessTokenValid)
      {
        return;
      }
      else if (IsRefreshTokenValid)
      {
        AccessToken = RenewAccessTokenUsingRefreshToken();
        return;
      }
      else if (IsAuthorizationCodeNotNull(page.Request.QueryString["code"]))
      {
          Tuple<Tuple<string, DateTimeOffset>, string> tokens = null;
          try
          {
            tokens = AcquireTokensUsingAuthCode(page.Request.QueryString["code"]);
          }
          catch
          {
            page.Response.Redirect(AuthorizeUrl);
          }
          AccessToken = tokens.Item1;
          RefreshToken = tokens.Item2;
        return;
      }
      else
      {
        page.Response.Redirect(AuthorizeUrl);
      }
    }
    

ヒント

クラスの AADAuthHelper エラー処理は最小限です。 運用環境で使用可能な品質を持つ、堅牢な SharePoint アドインを作成するには、MSDN ノード「OAuth 2.0 と Azure Active Directory を使用した Web アプリケーションへのアクセスの承認」で説明されているように、エラー処理をさらに追加する必要があります。

データ モデル クラスを作成する

  1. 1 つ以上のクラスを作成して、アドインが SAP から取得するデータをモデル化します。 このトピックの例では、データ モデル クラスが 1 つだけ存在します。 ASP.NET プロジェクトを右クリックし、Visual Studio 項目追加プロセスを使用して、新しいクラス ファイルを Automobile.cs という名前のプロジェクトに追加します。

  2. 次のコードをクラスの本文に追加します。

    public string Price;
    public string Brand;
    public string Model;
    public int Year;
    public string Engine;
    public int MaxPower;
    public string BodyStyle;
    public string Transmission;
    

SAP Gateway for Microsoft 経由で SAP からデータを取得するためのコードを追加する

  1. Default.aspx.cs ファイルを開き、次の using ステートメントを追加します。

    using System.Net;
    using Newtonsoft.Json.Linq;
    
  2. アドインがアクセスする SAP OData エンドポイントのベース URL を値として持つ const 宣言を Default クラスに追加します。 例を次に示します。

    private const string SAP_ODATA_URL = @"https://<SAP_gateway_domain>.cloudapp.net:8081/perf/sap/opu/odata/sap/ZCAR_POC_SRV/";
    
  3. Office Developer Tools for Visual Studio では、 Page_PreInit メソッドと Page_Load メソッドが追加されました。 Page_Load メソッド内のコードをコメントアウトし、Page_Init メソッド全体をコメントアウトします。 このコードはこの例では使用されません (SharePoint アドインが SharePoint にアクセスする場合に、このコードを復元します。 「SharePoint アクセスを ASP.NET アプリケーションに追加する (オプション)」を参照してください。)

  4. 以下の行を Page_Load メソッドの上部に追加します。 これにより、ASP.NET アプリケーションは SSL (HTTPS) を使用して SAP Gateway for Microsoft と通信するので、デバッグのプロセスが簡単になります。しかし、"localhost:port" サーバーは SAP Gateway for Microsoft の資格情報を信頼するようには構成されていません。 このコード行がないと、Default.aspx が開く前に、無効な資格情報であることを警告するメッセージが表示されます。 一部のブラウザーではクリックしてこのエラーに対処できますが、Default.aspx をまったく開けなくなるブラウザーもあります。

    ServicePointManager.ServerCertificateValidationCallback = (s, cert, chain, errors) => true;
    

    重要

    ASP.NET アプリケーションをステージングに展開する準備ができたら、この行を削除します。 「アドインを変更して Azure および Office 365 にステージングする」を参照してください。

  5. 次のコードを Page_Load メソッドに追加します。 メソッドに GetSAPData 渡す文字列は OData クエリです。

    if (!IsPostBack)
    {
      GetSAPData("DataCollection?$top=3");
    }
    
  6. 次のメソッドを Default クラスに追加します。 このメソッドは、最初に、アクセス トークンのキャッシュに、Azure AD から取得された有効なアクセス トークンがあることを確認します。 それから、アクセス トークンを含む HTTP GET 要求を作成し、その要求を SAP OData エンドポイントに送信します。 結果は JSON オブジェクトとして返され、これが .NET List オブジェクトに変換されます。 アイテムの 3 つのプロパティが、DataListView にバインドされた配列で使用されます。

    private void GetSAPData(string oDataQuery)
    {
      AADAuthHelper.EnsureValidAccessToken(this);
    
      using (WebClient client = new WebClient())
      {
        client.Headers[HttpRequestHeader.Accept] = "application/json";
        client.Headers[HttpRequestHeader.Authorization] = "Bearer " + AADAuthHelper.AccessToken.Item1;
        var jsonString = client.DownloadString(SAP_ODATA_URL + oDataQuery);
        var jsonValue = JObject.Parse(jsonString)["d"]["results"];
        var dataCol = jsonValue.ToObject<List<Automobile>>();
    
        var dataList = dataCol.Select((item) => {
            return item.Brand + " " + item.Model + " " + item.Price;
            }).ToArray();
    
        DataListView.DataSource = dataList;
        DataListView.DataBind();
      }
    }
    

ユーザー インターフェイスを作成する

  1. Default.aspx ファイルを開き、次のマークアップをページの formに追加します。

    <div>
    <h3>Data from SAP via SAP Gateway for Microsoft</h3>
    
    <asp:ListView runat="server" ID="DataListView">
      <ItemTemplate>
        <tr runat="server">
          <td runat="server">
            <asp:Label ID="DataLabel" runat="server"
              Text="<%# Container.DataItem.ToString()%>" /><br />
          </td>
        </tr>
      </ItemTemplate>
    </asp:ListView>
    </div>
    
  2. オプションで、SharePoint クロム コントロールおよび ホスト SharePoint Web サイトのスタイル シートを使用して Web ページに SharePoint ページの "外観" を与えます。

Visual Studio で F5 キーを押してアドインをテストする

  1. Visual Studio で F5 を選択します。
  2. 初めて F5 キーを使用するとき、使用する開発者向けサイトにサインインするように求めるプロンプトが表示される場合があります。 サイト管理者の資格情報を使用します。 このトピックの例では、Bob@<O365_domain>.onmicrosoft.com です。
  3. 初めて F5 キーを使用するとき、アドインへのアクセス許可を付与するように求めるプロンプトが表示されます。 [信頼する] を選択します。
  4. アクセス トークンの取得中に、少し遅れて Default.aspx ページが開きます。 SAP データが表示されていることを確認します。

SharePoint アクセスを ASP.NET アプリケーションに追加する (オプション)

当然のことですが、SharePoint アドインは SharePoint から起動した Web ページに SAP データのみを公開するわけではありません。 SharePoint データの作成、読み込み、更新、削除 (CRUD) も実行できます。 分離コードでは、SharePoint クライアント オブジェクト モデル (CSOM) または SharePoint の REST API のいずれかを使用してこれらを実行します。 CSOM は、Office Developer Tools for Visual Studio によって ASP.NET プロジェクトに自動的に含められるアセンブリのペアとして展開されます。これは、Visual Studio で [ローカルにコピー] に設定されて、ASP.NET アプリケーション パッケージに含められるようになります。

CSOM の使用の詳細については、まず「SharePoint のクライアント ライブラリ コードを使用して基本的な操作を完了する」を参照してください。 REST API の使用については、「 SharePoint REST インターフェイスについて」と「使用する」を参照してください

SharePoint にアクセスするために CSOM を使用するか、REST API を使用するかにかかわりなく、ASP.NET アプリケーションは、SAP Gateway for Microsoft に対して行うように、SharePoint へのアクセス トークンも取得する必要があります。 この記事の前の方にある「SAP Gateway for Microsoft および SharePoint への認証と承認について」を参照してください。

以下の手順では、この実行方法に関する基本的なガイダンスが提供されますが、まず以下の記事を読むことをお勧めします。

SharePoint アクセスを ASP.NET アプリケーションに追加する

  1. Default.aspx.cs ファイルを開き、メソッドのコメントを解除します Page_PreInit 。 また、Office Developer Tools for Visual Studio が メソッドに追加したコードのコメントを Page_Load 解除します。

  2. SharePoint アドインが SharePoint データにアクセスする場合、アドインが SharePoint で起動されるときに Default.aspx ページに POST される SharePoint コンテキスト トークンをキャッシュする必要があります。 これにより、ブラウザーが Azure AD 認証の後にリダイレクトされても、SharePoint コンテキスト トークンが失われないようにすることができます (このコンテキストをキャッシュする方法には、いくつかのオプションがあります)。Office Developer Tools for Visual Studio は大部分の処理を実行する SharePointContext.cs ファイルを ASP.NET プロジェクトに追加します。 セッション キャッシュを使用するには、if (!IsPostBack) ブロック内の SAP Gateway for Microsoft を呼び出すコードのに以下のコードを追加します。

    if (HttpContext.Current.Session["SharePointContext"] == null)
    {
        HttpContext.Current.Session["SharePointContext"]
            = SharePointContextProvider.Current.GetSharePointContext(Context);
    }
    
  3. SharePointContext.cs ファイルは、Office Developer Tools for Visual Studio がプロジェクトに追加した別のファイル TokenHelper.cs を呼び出します。 このファイルは、SharePoint のアクセス トークンを取得して使用するために必要なほとんどのコードを提供します。 ただし、有効期限が切れたアクセス トークンや有効期限の切れたリフレッシュ トークンを更新するコードは提供しません。 また、トークンをキャッシュするコードも含まれていません。 運用品質の SharePoint アドインの場合は、このようなコードを追加する必要があります。 前述のステップのキャッシュ ロジックは、その一例です。 また、アクセス トークンをキャッシュしたり、有効期限が切れるまで再使用したりするコードも含める必要があります。 アクセス トークンの有効期限が切れたら、コードはリフレッシュ トークンを使用して新しいアクセス トークンを取得しなければなりません。

  4. CSOM または REST を使用して、データ呼び出しを SharePoint に追加します。 以下の例は、Office Developer Tools for Visual Studio が Page_Load メソッドに追加する CSOM コードを変更したものです。 この例では、コードが独立したメソッドになっており、キャッシュされたコンテキスト トークンの取得によって開始されます。

    private void GetSharePointTitle()
    {
        var spContext = HttpContext.Current.Session["SharePointContext"] as SharePointContext;
        using (var clientContext = spContext.CreateUserClientContextForSPHost())
        {
            clientContext.Load(clientContext.Web, web => web.Title);
            clientContext.ExecuteQuery();
            SharePointTitle.Text = "SharePoint website title is: " + clientContext.Web.Title;
        }
    }
    
  5. SharePoint データをレンダリングする UI 要素を追加します。 以下は、前述のメソッドで参照される HTML コントロールを示しています。

    <h3>SharePoint title</h3>
    <asp:Label ID="SharePointTitle" runat="server"></asp:Label><br />
    

    注意

    SharePoint アドインをデバッグする際、Visual Studio で F5 キーを押すたびに、Office Developer Tools for Visual Studio は Azure ACS にアドインを再登録します。 SharePoint アドインをステージングする場合、長期の登録を行う必要があります。 「アドインを変更して Azure と Office 365 にステージングする」を参照してください。

アドインを変更して Azure と Office 365 にステージングする

Visual Studio で F5 キーを使用して SharePoint アドインのデバッグを終了したら、ASP.NET アプリケーションを実際の Azure Web サイトに展開する必要があります。

Azure Web サイトを作成するには

  1. Microsoft Azure portal で、左側のナビゲーション バーにある [Web サイト] を開きます。

  2. ページの下部にある [新規作成] を選択し、[新規作成] ダイアログで、[WEB サイト] |[簡易作成] を選択します。

  3. ドメイン名を入力して、[Web サイトの作成] を選択します。 新しいサイトの URL のコピーを作成します。 my_domain.azurewebsites.net という形式になっています。

アプリケーションでコードとマークアップを変更する

  1. Visual Studio で、Default.aspx.cs ファイルから行ServicePointManager.ServerCertificateValidationCallback = (s, cert, chain, errors) => true;を削除します。
  2. ASP.NET プロジェクトの web.config ファイルを開き、セクションのキーの値の AppRedirectUrl ドメイン部分を appSettings Azure Web サイトのドメインに変更します。 たとえば、<add key="AppRedirectUrl" value="https://localhost:44322/Pages/Default.aspx" /><add key="AppRedirectUrl" value="https://my_domain.azurewebsites.net/Pages/Default.aspx" /> に変更します。
  3. SharePoint アドイン プロジェクトで AppManifest.xml ファイルを右クリックし、[ コードの表示] を選択します。
  4. 値で StartPage 、文字列 ~remoteAppUrl を、プロトコルを含む Azure Web サイトの完全なドメイン (例: https://my_domain.azurewebsites.net) に置き換えます。 値全体StartPageがであるhttps://my_domain.azurewebsites.net/Pages/Default.aspx必要があります (通常、StartPage値はweb.config ファイル内のキーのAppRedirectUrl値とまったく同じです)。

Azure AD 登録を変更してアドインを ACS に登録するには

  1. Azure 管理者アカウントを使用して、Azure portal にサインインします。

  2. 左側の [Active Directory] を選択します。

  3. ご使用のディレクトリを選択します。

  4. [アプリケーション] (上部のナビゲーション バーにあります) を選択します。

  5. 作成したアプリケーションを開きます。 このトピックの例では、"ContosoAutomobileCollection" です。

  6. 次に示す値ごとに、その値の "localhost: port" の部分を新しい Azure Web サイトのドメインに変更します。

    • サインオン URL
    • アプリ ID URI
    • 応答 URL

    たとえば、[アプリ ID URI] が "https://localhost:44304/ContosoAutomobileCollection" の場合、"https://<my_domain>.azurewebsites.net/ContosoAutomobileCollection" に変更します。

  7. 画面下部にある [保存] を選択します。

  8. アドインを Azure ACS に登録する アドインが SharePoint にアクセスせず、ACS からのトークンを使用しない場合であっても、この手順を実行する必要があります。それは、この同じプロセスで、アドインが Office 365 サブスクリプションのアドイン管理サービスにも登録されるためです。これは必須です (当初 SharePoint アドインは "SharePoint 用アプリ" と呼ばれていたため、"アドイン管理サービス" と呼ばれます)。

    登録は Office 365 サブスクリプションの SharePoint Web サイトの AppRegNew.aspx ページで実行します。 詳しくは、「SharePoint アドインを登録する」をご覧ください。

    このプロセスの一部として、新しいクライアント ID とクライアント シークレットを取得することになります。 web.config で ClientId (ida:ClientID ではない) と ClientSecret キーにこれらの値を挿入します。

    警告

    この変更を行った後に、何らかの理由で F5 キーを押した場合、Office Developer Tools for Visual Studio はこれらの値の一方または両方を上書きします。 そのため、AppRegNew.aspx で取得した値の記録を保持しておき、ASP.NET アプリケーションを発行する直前に、web.config のその値が正しいことを常に確認する必要があります。

ASP.NET アプリケーションを Azure に発行し、アドインを SharePoint にインストールする

  1. ASP.NET アプリケーションを Azure Web サイトに発行するには、いくつかの方法があります。 詳細については、「Azure App Service へのローカル Git デプロイ」を参照してください。
  2. Visual Studio では、SharePoint アドイン プロジェクトを右クリックして、[パッケージ] を選択します。 表示される [アドインの発行] ページで、[アドインのパッケージ] を選択します。 アドイン パッケージが格納されたフォルダーが表示されたファイル エクスプローラーが開きます。
  3. Office 365 にグローバル管理者としてサインインし、組織のアドイン カタログ サイト コレクションまで移動します (存在しない場合は、作成します。「 アドイン カタログを使用してカスタム ビジネス アドインを SharePoint Online 環境で使用できるようにする」を参照してください)。
  4. アドイン パッケージをアドイン カタログにアップロードします。
  5. サブスクリプション内の任意の Web サイトの [サイト コンテンツ] ページに移動し、[アドインの追加] を選択します。
  6. [自分のアドイン] ページで、[追加できるアドイン] セクションまでスクロールし、アドインのアイコンを選択します。
  7. アドインがインストールされたら、[サイト コンテンツ] ページにあるそのアイコンを選択してアドインを起動します。

SharePoint アドインのインストールの詳細については、「SharePoint アドインの展開とインストール: 方法とオプション」を参照してください。

アドインを運用環境に展開する

すべてのテストが終了したら、アドインを運用環境に展開できます。 ただし、何らかの変更が必要な場合もあります。

  1. ASP.NET アプリケーションの運用ドメインがステージング ドメインと異なる場合は、web.configの値とStartPageAppManifest.xml ファイル内の値を変更AppRedirectUrlし、SharePoint アドインを再パッケージ化する必要があります。 この記事の前の方にある手順「アプリケーションでコードとマークアップを変更する」を参照してください。
  2. ドメインを変更する場合、Azure AD へのアドインの登録を編集することも必要です。 上記の手順「Azure AD 登録を変更してアドインを ACS に登録する」を参照してください。
  3. この手順で説明したとおり、ドメインを変更するには、ACS (およびサブスクリプションのアドイン管理サービス) へのアドインの再登録が必要です (アドインの ACS への登録を 編集 する方法はありません)。ただし、 AppRegNew.aspx ページで新しいクライアント ID またはクライアント シークレットを生成する必要はありません。 元の値は、(ではなくida:ClientID) とClientSecretweb.configのキーから ClientId AppRegNew フォームにコピーできます。 新しい値を生成する場合は、必ずweb.configのキーに新しい値 コピーしてください。

関連項目


その他のリソース

events

Microsoft 365 Community Conference

5月6日 14時 - 5月9日 0時

5 月 6 日から 8 日にラスベガスで開催される、コミュニティ主導の究極の Microsoft 365 イベントで AI の時代に向けてスキルアップします。

詳細情報