Pnp.PowerShell 如何從IDCRL改用OAuth 2.0憑證登入
記得先更新pnp到最新版本: CHG: Pnp.PowerShell 如何安裝 與 基本用法
以及參考上一篇文章創建應用程式: CHG: 2024-09-09 SharePoint 禁用帳密登入改動 如何使用Application應用程式登入
2026-05-01 即將停用委託登入了,再來強迫必須用證書登入了,在舊文章裡有說如何直接註冊應用程式+創建證書,這邊單獨講在現有的應用程式裡添加證書
生成證書
這是生成證書的指令 (再次提醒 pnp 要更新到最新版本)
$params = @{
CommonName = "PnP_Rocks"
ValidYears = 10
OutPfx = "./secrets/PnP_Rocks.pfx"
OutCert = "./secrets/PnP_Rocks.cer"
CertificatePassword = "<YourPassword>" | ConvertTo-SecureString -AsPlainText -Force
}; New-PnPAzureCertificate @paramsCertificatePassword 是可選項可以不設就空白密碼,要設記得改成自己的密碼
生成之後把 PnP_Rocks.cer 上傳到應用程式上就可以用了
連接測試
連接方式有幾種這個是從檔案直接連(以檔案方式儲存比較不安全)
$params = @{
Url = "https://<tenant>.sharepoint.com/sites/<SiteName>"
ClientId = "<YourClientId>"
Tenant = "<tenant>.onmicrosoft.com"
CertificatePath = "./secrets/PnP_Rocks.pfx"
CertificatePassword = ConvertTo-SecureString "<YourCertPassword>" -AsPlainText -Force
}; Connect-PnPOnline @params 這個是加到信任區之後用指紋連接 (這才是真正安全的方式)
$params = @{
Url = "https://<tenant>.sharepoint.com/sites/<SiteName>"
ClientId = "<YourClientId>"
Tenant = "<tenant>.onmicrosoft.com"
Thumbprint = "<YourCertThumbprint>"
}; Connect-PnPOnline @params 目前還沒設權限登入啥都不能做只是先測試能登再說,下一步設完權限就可以動了
權限設置
關於權限限縮的問題用 Sites.Selected 可以限制僅能單一網站,下面是範例。
先到應用程式中新增該權限,讓 pnp.powershell 可以指定權限
(目前只能用 pnp.powershell 設置,網頁上無法設置)
用管理員帳號 DeviceLogin 登入
$param = @{
Url = "https://<tenant>.sharepoint.com/sites/<SiteName>"
ClientId = "<YourClientId>"
}; Connect-PnPOnline @param -Interactive授權 App 存取指定網站 (這跟上面是一組的要設別的網站得在登一次)
$param = @{
AppId = "<YourClientId>"
DisplayName = "<AppName>"
Site = "https://<tenant>.sharepoint.com/sites/<SiteName>"
Permissions = "FullControl" # Read | Write | Manage | FullControl
}; Grant-PnPAzureADAppSitePermission @paramg設好之後就可以開始操作了,這樣就可以應付 5/1 的改版了
[番外] 將憑證加入Windows憑證商店
加入當前使用者的"個人"中
$params = @{
FilePath = "./secrets/PnP_Rocks.pfx"
CertStoreLocation = "Cert:\CurrentUser\My"
Password = ConvertTo-SecureString "<YourCertPassword>" -AsPlainText -Force
}; Import-PfxCertificate @params加入本機的"個人"中
$param = @{
FilePath = "./secrets/PnP_Rocks.pfx"
CertStoreLocation = "Cert:\LocalMachine\My"
Password = ConvertTo-SecureString "<YourCertPassword>" -AsPlainText -Force
}; Import-PfxCertificate @param匯入後會自動顯示指紋,要直接看指紋的話是這個指令
$param = @{
TypeName = "Security.Cryptography.X509Certificates.X509Certificate2"
ArgumentList = @(
"./secrets/PnP_Rocks.pfx",
(ConvertTo-SecureString "<YourCertPassword>" -AsPlainText -Force)
)
}; (New-Object @param)

沒有留言:
張貼留言