2024-09-09 SharePoint 禁用帳密登入改動 如何使用Application應用程式登入
突然的改動導致原本使用帳密登入 SharePoint 的腳本變得無法執行了。
具體的錯誤信息是以下報錯 AADSTS50076 的信息
Connect-PnPOnline : AADSTS50076: Due to a configuration change made by your administrator, or because you moved to a ne
w location, you must use multi-factor authentication to access '00000003-0000-0ff1-ce00-000000000000'. Trace ID: a28ff3
72-9f22-4018-9c6a-1341a7b16900 Correlation ID: 85a19fdf-03b2-4804-8987-49055663a3e5 Timestamp: 2024-09-13 03:44:03Z
官方的說明參考這篇
PnP Management Shell EntraID app is deleted : what should I do ? · Issue #4250
這邊有提到得的解是這篇
Register an Entra ID Application to use with PnP PowerShell | PnP PowerShell
不過這篇有幾個小插曲,那個英文分段分的不是很明確很容易誤以為整篇都在講同一個方法,其實總共有三個方法。
第二個坑是 $result = Register-PnPEntraIDApp -ApplicationName “PnP Rocks” -Tenant [yourtenant].onmicrosoft.com -OutPath c:\mycrtificates -DeviceLogin
這行代碼在 2.12 版本有 bug 是不能跑得,詳見這篇解法就是單純升級版本就修好了。
下面讓我們開始吧。
環境準備
要滿足兩個條件
- PowerShell 7
- Pnp.PowerShell 2.12.3
這是因為 Pnp.PowerShell 2 是面向PowerShell
下面請用管理員權限打開 PowerShell 5.1 執行
PowerShell 7 安裝指令
在 Windows 上安裝 PowerShell - PowerShell | Microsoft Learn
winget install --id Microsoft.Powershell --source winget
然後輸入 Pwsh 切換到 PowerShell 7 版本
pwsh
啟動之後檢查一下版本
$PSVersionTable
然後安裝 Pnp.PowerShell
Install-Module PnP.PowerShell -AllowPrerelease -Force -SkipPublisherCheck
Get-Module -Name PnP.PowerShell -ListAvailable
到這邊必要的環境就都安裝完成了
註冊應用程式
在開始前記得確保你打開的終端機是 PowerShell 7
最省力的辦法是用 PnP.PowerShell 社群幫你做的懶人包。
Register an Entra ID Application to use with PnP PowerShell | PnP PowerShell
這邊示範登入使用 CertificateBase64Encoded 所以沒有把證書存下來。
(事實上 CertificateBase64Encoded 就是證書檔案二進制,能還原的)
$result = Register-PnPEntraIDApp -ApplicationName PnP_Rocks -Tenant [你的租戶名].onmicrosoft.com -Interactive
預設的租戶名 xxx.onmicrosoft.com
方法1:從你的網站 https://[你的租戶名].sharepoint.com 網址上找到。
方法2:組織通常會新增自己的域名比如說 xxx@gmail.com 中的 gmail.com 也可以用。沒新增的話預設是 xxx@xxx.onmicrosoft.com 兩個長一個樣。
執行之後會出現內部的.NET的UI登入介面,請注意必須使用具網域管理員權限的帳號登入,總共會要求登入兩次
- 第一次是創建應用程式。(這次其實不用權限)
- 第二次是讓網域管理員承認應用程式權限
完成之後可以通過查看 $result 獲取證書的 Base64Encoded
$result
記得將他保存下來
$result > C:\PnP_Rocks_Certificate.txt
然後我們利用這個資訊登入
Connect-PnPOnline 'https://[你的租戶名].sharepoint.com/sites/[你的網站名]' -ClientId $result."AzureAppId/ClientId" -Tenant [你的租戶名].onmicrosoft.com -CertificateBase64Encoded $result.Base64Encoded
到這邊就登入成功了
切記這個權限超級超級大,Base64Encoded內容一定要保護好。
創建完成之後可以在這個網址找到自動建立的應用程式
在這裡可以編輯權限
(這邊截圖不是照上面來的參考用而已,上面設定完權限不應是委託而是應用程式)
註冊應用程式2 (儲存證書)
重複的就不講了留最重要的代碼就好,這是會把證書儲存下來的方法。
mkdir d:\mycertificates
$result = Register-PnPEntraIDApp -ApplicationName PnP_Rocks -Tenant [你的租戶名].onmicrosoft.com -OutPath d:\mycertificates -Interactive
證書輸出之後把 pfx 安裝到”個人”,然後用下面的方式登入
Connect-PnPOnline 'https://[你的網站].sharepoint.com/sites/Maple' -ClientId $result."AzureAppId/ClientId" -Tenant [你的租戶名].onmicrosoft.com -Thumbprint $result."Certificate Thumbprint"
總之把他設定成不可匯出就不用被幹走了,剩下的證書封存的方式在自己琢磨一下。
參考網站
- 身份驗證 |PnP PowerShell
- [BUG] Register-PnPEntraIDApp Hanging · Issue #4260 · pnp/powershell (github.com)
- PnP Management Shell EntraID app is deleted : what should I do ? · Issue #4250 · pnp/powershell (github.com)