PnP PowerShell を任意のアクセス許可で実行する
はじめに
PnP PowerShell を最初に実行したときに Admin Consent を要求されるのですがアクセス許可の一覧がエグくてびっくりします。
さすがにこれは許可しづらいので、もうちょっとアクセス許可を制限した上で PnP PowerShell を使いたいです。方法はいくつかあります。
SharePoint アドインを使用する
アドインの登録方法をはじめ詳しい手順はこちらが詳しいです。
クライアント ID とクライアント シークレットを使ってログインできます。
Connect-PnPOnline -Url https://{{tenant-name}}.sharepoint.com -ClientId {{client-id}} -ClientId {{client-secret}}
注意するべき点として、既定では使えないテナントがあるそうです。
2020 年夏頃以降に新規作成したテナントにおいて、アプリ専用トークンが既定で無効化されている場合があります。
Azure AD アプリケーションを使用する
委任されたアクセス許可
委任されたアクセス許可 (ユーザーとしてログイン) の場合、以下の方法が可能です。
Connect-PnPOnline -Url https://{{tenant-name}}.sharepoint.com -Tenant {{tenant-id}} -ClientId {{client-id}} -DeviceLogin
Tenant パラメーターはマルチテナント アプリケーションの場合は不要です。
注意するべき点として、Azure AD アプリケーションがパブリック クライアント フローを許可している必要があります。許可していない場合、以下のエラーが発生します。
AADSTS7000218: The request body must contain the following parameter: 'client_assertion' or 'client_secret'.
アプリケーションのアクセス許可
アプリケーションのアクセス許可の場合、クライアント シークレットを使うことはできず、証明書によるログインが必須になります。
Connect-PnPOnline -Url https://{{tenant-name}}.sharepoint.com -Tenant {{tenant-id}} -ClientId {{client-id}} -CertificatePath {{certificate-path}} -CertificatePassword {{certificate-password}}
アクセス トークン
取得済みのアクセス トークンを使ってログインすることもできます。
Connect-PnPOnline -Url https://{{tenan-tname}}.sharepoint.com -Tenant {{tenant-id}} -AccessToken {{access-token}}
おわりに
ドキュメントにすべて書いてあるのですがちょいちょい不親切なんですよね。
そもそも Scope を指定できるようにしてほしいと思ったら、Register-PnPAzureADApp
を使って必要なアクセス許可を持つアプリを簡単に作ってね、ということらしいです。理屈はわかるけどいまいちな気がしますね。
Discussion