The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何透過命令列工具清除 Windows 認證管理員中的帳號密碼

最近嘗試使用 Azure Static Web Apps CLI 來開發與部署前端應用程式,但發現我用 swa login 之後,卻完全沒有「登出」的選項,經研究後發現 swa 把登入過程的認證資訊全部都放在 Windows 控制台的認證管理員(Credential Manager)之中。這篇文章我打算來分享如何透過 PowerShell 快速清除儲存在系統中的認證資訊。

CMDKEY

安裝 Azure Static Web Apps CLI 並登入 Azure

  1. 安裝 Node.js LTS

    choco install nodejs-lts -y
    
  2. 安裝 Azure Static Web Apps CLI

    npm install -g @azure/static-web-apps-cli
    
  3. 使用 swa 命令列工具登入 Azure 帳戶

    swa login
    

    過程會自動開啟瀏覽器,並進行 OAuth 2.0 授權流程,通過認證與授權後,基本上就會在 Windows 控制台的認證管理員(Credential Manager)寫入認證資訊。

如何清空 Azure 登入快取 (或任何儲存在裡面的任何認證資訊)

以下我們會透過 Windows 內建的 cmdkey 工具程式來幫助我們操作認證管理員中的資訊。

  • 列出所有已儲存的認證清單(Credential List)

    cmdkey.exe /list
    

    若是 swa 寫入的資料,其內容會長這樣:

        Target: LegacyGeneric:target=swa-cli-50a48d6ace789c15788810715b78db37/AzureCloud-1
        Type: Generic
        User: AzureCloud-1
    

    這裡的 Target: 是重要的識別資訊,未來要刪除該筆記錄必須使用這個值。

  • 列出所有 swa 相關的認證清單(Credential List)

    cmdkey.exe /list | findstr LegacyGeneric:target=swa-cli
    

    也可以寫簡單一點:

    cmdkey.exe /list | findstr swa-cli
    

    image

  • 刪除一筆紀錄

    cmdkey.exe /delete:"LegacyGeneric:target=swa-cli-50a48d6ace789c15788810715b78db37/AzureCloud-1"
    

    畫面會顯示以下訊息:

    CMDKEY: Credential deleted successfully.
    
  • 快速刪除所有 swa 建立的認證資料

    cmdkey.exe /list | findstr swa-cli | ForEach-Object {
      cmdkey /delete:$($_.Split(' ')[5])
    }
    

    image

總結

事實上,這個 CMDKEY 命令列工具支援新增刪除認證,使用上也相當容易上手,相當不錯!

PS> cmdkey

Creates, displays, and deletes stored user names and passwords.

The syntax of this command is:

CMDKEY [{/add | /generic}:targetname {/smartcard | /user:username {/pass{:password}}} | /delete{:targetname | /ras} | /list{:targetname}]

Examples:

  To list available credentials:
     cmdkey /list
     cmdkey /list:targetname

  To create domain credentials:
     cmdkey /add:targetname /user:username /pass:password
     cmdkey /add:targetname /user:username /pass
     cmdkey /add:targetname /user:username
     cmdkey /add:targetname /smartcard

  To create generic credentials:
     The /add switch may be replaced by /generic to create generic credentials

  To delete existing credentials:
     cmdkey /delete:targetname

  To delete RAS credentials:
     cmdkey /delete /ras

相關連結