SharePoint アドインで期限が切れたクライアント シークレットを置換する

AppRegNew.aspx ページを使用して登録されている SharePoint アドインのクライアント シークレットは、1 年後に期限が切れます。 この記事では、アドイン用の新しいシークレットを追加する方法に加え、3 年間有効な新しいクライアント シークレットを作成する方法について説明します。

注:

この記事は、組織のカタログを通じて配布され、AppRegNew.aspx ページを使用して登録された SharePoint アドインについて書かれています。 アドインが販売者ダッシュボード上で登録されたものの場合は、「販売者ダッシュボードでクライアント ID とクライアント シークレットを作成または更新する」を参照してください。

有効期限が切れる少なくとも 30 日前に新しいシークレットを作成することをお勧めします。 これにより、古い資格情報の有効期限が切れるまで 1 か月の時間が与えられます。

シークレットをアプリケーション構成から削除した場合は、有効期限が切れてから少なくとも 7 日後にシークレットを削除することをお勧めします。

アプリケーション構成から削除する前に ACS から期限切れのシークレットを削除すると、エラーが発生します。

前提条件

開始する前に以下の点を確認します。

  • Microsoft Online Services サインイン アシスタントが開発コンピューターにインストールされている。
  • PowerShell を使用して Office 365 に接続できる。Office 365 PowerShell への接続
  • AppRegNew.aspx ページでアドインが登録されている Office 365 テナントのテナント管理者 (またはファームのファーム管理者) であること。

Office 365 テナンシーにインストールされた SharePoint アドインの有効期限の確認

  1. Windows PowerShell を開き、以下のコマンドレットを実行します。

    Connect-MsolService
    
  2. サインインのダイアログで、AppRegNew.aspx でアドインが登録されている Office 365 テナンシーまたはファームのテナント管理者 (またはファーム管理者) の資格情報を入力します。

  3. 次の行を使用して、各アドインとそれぞれのシークレットの有効期限を一覧表示するレポートを作成します。 このコードについては以下の点に注意してください。

    • 最初に、マイクロソフト独自のアプリケーション、開発中のアドイン (さらに自動ホスト型と呼ばれていた現在使用されなくなったタイプのアドイン) を除外します。
    • 残ったものの中から、非 SharePoint アドインと、ワークフローなどの非対称暗号鍵を使用するアドインを除外します。
    $applist = Get-MsolServicePrincipal -all  |Where-Object -FilterScript { ($_.DisplayName -notlike "*Microsoft*") -and ($_.DisplayName -notlike "autohost*") -and  ($_.ServicePrincipalNames -notlike "*localhost*") }
    
    foreach ($appentry in $applist) {
        $principalId = $appentry.AppPrincipalId
    
        Get-MsolServicePrincipalCredential -AppPrincipalId $principalId -ReturnKeyValues $false | Where-Object { $_.Type -eq "Password" } | ForEach-Object {
            [PSCustomObject][Ordered]@{
                PrincipalName = $appentry.DisplayName
                PrincipalId = $principalId
                KeyID = $_.KeyId
                StartDate = $_.StartDate
                EndDate = $_.EndDate
            } | Export-Csv -Path C:\temp\appsec.csv -NoTypeInformation -Delimiter ';' -Append
        }
    }
    
  4. ファイル C:\temp\appsec.csvを開いてレポートを表示します。 いずれかのシークレットが期限切れ間近である場合は、次の手順のために Windows PowerShell ウィンドウを開いたままにします。

新しいシークレットの生成

  1. 以下の行で、SharePoint アドインのクライアント ID をパラメーターとして使用し、クライアント ID 変数を作成します。

    $clientId = 'client id of the add-in'
    
  2. 以下の行で、新しいクライアント シークレットを生成します。

    $bytes = New-Object Byte[] 32
    $rand = [System.Security.Cryptography.RandomNumberGenerator]::Create()
    $rand.GetBytes($bytes)
    $rand.Dispose()
    $newClientSecret = [System.Convert]::ToBase64String($bytes)
    $dtStart = [System.DateTime]::Now
    $dtEnd = $dtStart.AddYears(1)
    New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Symmetric -Usage Sign -Value $newClientSecret -StartDate $dtStart -EndDate $dtEnd
    New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Symmetric -Usage Verify -Value $newClientSecret -StartDate $dtStart -EndDate $dtEnd
    New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Password -Usage Verify -Value $newClientSecret -StartDate $dtStart -EndDate $dtEnd
    $newClientSecret
    
  3. 新しいクライアント シークレットが Windows PowerShell コンソールに表示されます。 このシークレットをテキスト ファイルにコピーします。 このシークレットは次の手順で使用します。

    ヒント

    既定では、アドイン シークレットの有効期限は 1 年です。 これは、New-MsolServicePrincipalCredential コマンドレットの 3 つの呼び出しで -EndDate パラメーターを使用することにより、短縮または延長できます。

Visual Studio でリモート Web アプリケーションを更新し、新しいシークレットを使用する

重要

アドインがプレリリース バージョンの Microsoft Office Developer Tools for Visual Studio を使用して作成されている場合は、期限が切れたバージョンの TokenHelper.cs (または .vb) ファイルが含まれている可能性があります。 ファイルに文字列 "secondaryClientSecret" が含まれていない場合、このファイルは期限が切れています。新しいシークレットで Web アプリケーションを更新する前に、ファイルを置き換える必要があります。 ファイルのリリース バージョンのコピーを入手するには、Visual Studio 2012 以降が必要です。 Visual Studio で新しい SharePoint アドイン プロジェクトを作成します。 TokenHelper ファイルをそのプロジェクトから SharePoint アドインの Web アプリケーション プロジェクトにコピーします。

  1. Visual Studio で SharePoint アドイン プロジェクトを開き、Web アプリケーション プロジェクトの web.config ファイルを開きます。 appSettings セクションには、クライアント ID およびクライアント シークレットのキーがあります。 例を次に示します。

    <appSettings>
      <add key="ClientId" value="your client id here" />
      <add key="ClientSecret" value="your old secret here" />
        ... other settings may be here ...
    </appSettings>
    
  2. 次の例に示されているように、ClientSecret キーの名前を SecondaryClientSecret に変更します。

    <add key="SecondaryClientSecret" value="your old secret here" />
    

    注:

    この手順を初めて実行する場合には、この時点で構成ファイルに SecondaryClientSecret プロパティ エントリはありません。 しかし、後続のクライアント シークレットの有効期限 (2 番目または 3 番目) の手順を実行している場合には、プロパティ SecondaryClientSecret は既に存在し、初期または既に失効した古いシークレットを含んでいます。 この場合は ClientSecret の名前を変更する前に、まず SecondaryClientSecret プロパティを削除してください。

  3. 新しい ClientSecret キーを追加し、新しいクライアント シークレットを指定します。 マークアップは以下のようになるはずです。

    <appSettings>
      <add key="ClientId" value="your client id here" />
      <add key="ClientSecret" value="your new secret here" />
      <add key="SecondaryClientSecret" value="your old secret here" />
        ... other settings may be here ...
    </appSettings>
    

    重要

    新しく生成されたクライアント シークレットは、現在のクライアント シークレットの有効期限が切れるまで使用できません。 そのため、SecondaryClientSecret キーなしで ClientId キーを新しいクライアント シークレットに変更することはできません。 この記事の手順に従い、前のクライアント シークレットの有効期限が切れるのを待つ必要があります。 その後、SecondaryClientSecret を削除することもできます。

  4. 新しい TokenHelper ファイルに変更した場合は、プロジェクトを再構築します。

  5. Web アプリケーションを再発行します。

3 年間有効なクライアント シークレットを作成する

期限が切れたクライアント シークレットの場合、特定の clientId のすべての期限切れのシークレットをまず削除する必要があります。 それから MSO PowerShell で新しいシークレットを作成し、少なくとも 24 時間待ってから、アプリを新しい clientIdClientSecret キーでテストしてください。

  1. SharePoint Windows PowerShell を使用して、以下のマークアップを持つテナント管理者ユーザーを使って MSOnline に接続します。

    import-module MSOnline
    $msolcred = get-credential
    connect-msolservice -credential $msolcred
    
  2. ServicePrincipals とキーを取得します。 $keys を印刷すると、3 つのレコードが返されます。 それぞれのキーの EndDate も表示されます。 有効期限が切れたキーがあるかどうかを確認します。

    注:

    clientId は、期限切れの clientId と一致する必要があります。 この clientId のためのすべてのキー (期限が切れているものと切れていないもの両方) を削除することをお勧めします。

    $clientId = "27c5b286-62a6-45c7-beda-abbaea6eecf2"
    $keys = Get-MsolServicePrincipalCredential -AppPrincipalId $clientId
    $keys
    
  3. 実際に有効期限が切れていることを確認したら、すべてのキーを削除します。

    Remove-MsolServicePrincipalCredential -KeyIds $keys.KeyId -AppPrincipalId $clientId
    
  4. この clientID のための新しい ClientSecret を作成します。 前述の手順で設定されたものと同じ clientId を使用します。 新しい ClientSecret は 3 年間有効です。

    $bytes = New-Object Byte[] 32
    $rand = [System.Security.Cryptography.RandomNumberGenerator]::Create()
    $rand.GetBytes($bytes)
    $rand.Dispose()
    $newClientSecret = [System.Convert]::ToBase64String($bytes)
    $dtStart = [System.DateTime]::Now
    $dtEnd = $dtStart.AddYears(3)
    New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Symmetric -Usage Sign -Value $newClientSecret -StartDate $dtStart  -EndDate $dtEnd
    New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Symmetric -Usage Verify -Value $newClientSecret   -StartDate $dtStart  -EndDate $dtEnd
    New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Password -Usage Verify -Value $newClientSecret   -StartDate $dtStart  -EndDate $dtEnd
    $newClientSecret
    
  5. $newClientSecret の出力をコピーしてください。

  6. Web.config をこの ClientIdClientSecret で置換してください。 SecondaryClientSecret アプリ設定は必要はありません。

  7. ClientSecret が SharePoint Office (SPO) に伝達されるのに少なくとも 24 時間待ってください。

関連項目