Live Share 的安全性功能

Visual Studio Live Share 中的共同作業會話功能強大,可讓任意數量的人員加入會話,並共同編輯、偵測及進行更多作業。 但是,基於此層級的存取權,您一定會想要 Live Share 提供的安全性功能。 在本文中,我們將提供一些建議和選項,讓您在需要時保護您的環境。

如同任何共同作業工具,請記住,您應該只與您信任的人共用您的程式碼、內容和應用程式。

連接性

在對等之間起始會話時,Live Share 會嘗試建立點對點連線,而且只有在不可能的情況下 (例如因為防火牆/nat) ,它會回復為使用雲端轉送。 不過,在兩種連線類型 (P2P 或轉送) 中,在對等之間傳輸的所有資料都是使用 SSH 通訊協定進行端對端加密。 在轉送連線的情況下,SSH 加密會分層在 TLS 加密的 Websocket 之上。 這表示 Live Share 不依賴雲端轉送服務來取得安全性。 即使轉送遭到入侵,也無法將任何 Live Share 通訊解密。

Live Share 服務的角色僅限於使用者驗證和會話探索。 服務本身不會儲存或存取會話的任何內容。 Live Share 中的所有使用者內容都會透過 SSH 會話進行傳輸。 這包括程式碼、終端機、共用伺服器,以及 Live Share 所提供的任何其他共同作業功能,或由其建立的擴充功能。

若要深入瞭解如何改變這些行為和 Live Share 的連線需求,請參閱 Live Share 的連線能力需求

網路加密

SSH 通訊協定會使用 Diffie-Hellman 金鑰交換來建立會話的共用密碼,並且衍生自 AES 對稱式加密的金鑰。 加密金鑰會在會話的整個期間定期輪替。 共用會話秘密和所有加密金鑰都只會在記憶體中維護,而且只在會話持續期間有效。 它們永遠不會寫入磁片或傳送至任何服務 (包括 Live Share) 。

對等驗證

SSH 會話也是雙向驗證。 主機 (SSH 伺服器角色) 使用公開/私密金鑰驗證,如同 SSH 通訊協定的標準。 當主機共用 Live Share 的會話時,它會為會話產生唯一的 RSA 公開/私密金鑰組。 主機私密金鑰只會保留在主機進程的記憶體中;它永遠不會寫入磁片或傳送至任何服務,包括 Live Share 服務。 主機公開金鑰會連同會話連線資訊一起發佈至 Live Share 服務, (IP 位址和/或轉送端點) 讓來賓可透過邀請連結來存取該金鑰。 當來賓連接至主機的 SSH 會話時,來賓會使用 SSH 主機驗證通訊協定來驗證主機是否持有對應于已發佈公開金鑰 (的私密金鑰,而不讓來賓實際看到私密金鑰) 。

來賓使用 Live Share 權杖向主機驗證其本身。 權杖是 Live Share 服務所發出的帶正負號 JWT,其中包含透過 MSA、AAD 或 GitHub 登入) 取得的使用者身分識別 (的相關宣告。 權杖也有宣告,表示允許來賓存取該特定 Live Share 會話 (,因為它們具有邀請連結及/或已由主機) 明確地邀請。 主機會驗證該權杖並檢查宣告 (,視選項而定,可能會提示主機使用者) ,然後才允許來賓加入會話。

邀請和加入存取權

每次您啟動新的共同作業會話時,Live Share 都會產生一個 新的唯一識別碼,放在邀請連結中。 這些連結提供穩固、安全的基礎來邀請您信任的使用者,因為連結中的識別碼是「非猜到」,且 只有在單一共同作業會話的持續時間內有效

移除非預期的來賓

當來賓加入共同作業會話時,主機會自動收到通知。

在 Visual Studio Code:

Visual Studio Code 聯結通知

在 Visual Studio 中:

Visual Studio 聯結通知

更好的是,通知可讓您移除已加入的來賓(如果基於某些原因不知道)。 (比方說,如果您不小心將連結張貼在全公司的聊天系統上,並已加入隨機員工。 ) 只需在出現的通知中按一下 [移除] 按鈕,就會從共同作業會話中取出。

VS Code 中,即使您已關閉聯結通知,您也可以在那之後移除參與者。 藉由在 [Explorer] 或 [VS Code] 活動列的 [自訂] 索引標籤中開啟 Live Share 視圖,您可以將滑鼠停留在參與者的名稱上或以滑鼠右鍵按一下,然後選取 [移除參與者] 圖示或選項。

移除 VS Code 中的參與者

需要來賓核准

通常,加入共同作業會話的參與者會使用 Microsoft 公司或學校帳戶 (AAD) 、個人 Microsoft 帳戶或 GitHub 帳戶登 入 Live Share 。 當已登入使用者的「通知 + 移除」預設值為這些來賓提供了良好的速度與控制功能時,您可能會想要在您進行敏感性時,更進一步地 鎖定專案

此外,在某些情況下,強制所有來賓登入加入共同作業會話可能會有問題。 範例包括詢問某個人是否有新的 Live Share 加入為來賓、教室/學習案例,或與沒有其中一個支援帳戶類型的人員合作。 基於這些理由,Live Share 可以讓 未登入 的使用者將共同作業會話加入為 唯讀 來賓。 雖然主機必須在這些來賓預設可以加入的情況下進行 核准 ,但您可能會想要禁止這些「匿名」來賓,或一律改為核准它們。

已登入的使用者需要來賓核准

如果您想要防止已登入的來賓加入共同作業會話,直到您已「核准」它們為止,請變更下列設定:

  • VS Code 中,將下列內容新增至 settings.js(檔案 > 喜好設定 > 設定) :

    "liveshare.guestApprovalRequired": true
    
  • Visual Studio 中,將 [工具] > [選項] > Live Share > [需要來賓核准] 設定為 [True]。

    ![反白顯示 [來賓核准] 設定的 Visual Studio 設定] 視窗](../media/vs-setting-guestapproval.png)

從這裡開始,系統會要求您核准每個加入的來賓。

在 Visual Studio Code:

Visual Studio Code 加入核准要求

在 Visual Studio 中:

Visual Studio 加入核准要求

以來賓身分,如果您加入的會話中的主機已啟用此設定,則會在 Live Share 正在等候主機核准的狀態列或聯結對話方塊中收到通知。

自動拒絕或接受未登入 (匿名) 的使用者

如上所述,您可以設定 Live Share,讓未登 入的使用者唯讀 來賓的形式加入共同作業會話。 雖然這些「 匿名」來賓必須 在聯結時輸入名稱,但簡單名稱並不提供與實際登入相同的保證等級。 因此, 根據預設,系統會提示主機核准 任何匿名來賓,而不考慮上述的「需要來賓核准」設定。

一律可以拒絕 (停用匿名來賓) 或 一律接受 匿名使用者,如下所示:

  • VS Code 中,請在 liveshare.anonymousGuestApproval (檔案 > 喜好 settings.js設定 > 設定) () acceptrejectprompt 預設。

  • Visual Studio 中,設定工具 > 選項 > Live Share > [匿名來賓核准],以適當地接受、拒絕或提示 (預設) 。

無論如何,請記住,您應該只將 Live Share 邀請連結傳送給您信任的人員。

控制檔案存取和可見度

作為來賓,Live Share 的遠端模型可讓您快速讀取/寫入主機與您共用的檔案和資料夾,而不需要同步處理專案的整個內容。 因此,您可以在整個共用的檔案樹狀目錄中,個別流覽和編輯檔案。 不過,這種自由度對主機造成一些風險。 在概念上,開發人員可以選擇在不使用您的知識的情況下修改原始程式碼,或查看位於共用檔案樹狀結構中某處的機密原始程式碼或「秘密」。 因此,作為主機,您可能不會一律希望來賓存取您所共用的整個專案。 幸好是此遠端模型的額外優點,就是您可以選擇「排除」不想與任何人共用的檔案,而不會犧牲功能。 您的來賓仍可參與像是偵測會話等專案,如果他們想要自行存取這些檔案,通常需要存取這些檔案。

您可以藉由將檔案 .vsls.js 新增至您要共用的資料夾或專案,來完成此動作。 您新增至此 json 格式檔案的任何設定都會變更 Live Share 處理檔案的方式。 除了提供您直接控制之外,這些檔案也可以認可至原始檔控制,讓任何複製專案的人都能充分利用這些規則,而不需要額外的工作部分。

以下是檔案的範例 .vsls.js:

{
    "$schema": "http://json.schemastore.org/vsls",
    "gitignore":"none",
    "excludeFiles":[
        "*.p12",
        "*.cer",
        "token",
        ".gitignore"
    ],
    "hideFiles": [
        "bin",
        "obj"
    ]
}

注意

您也可以在啟動共同作業會話時,將共用的所有檔案/資料夾設為 唯讀 。 請參閱 下面 的詳細資料。

讓我們逐步解說這些屬性如何變更來賓可以執行的動作。

屬性

excludeFiles 屬性可讓您指定 glob 檔模式的清單, (非常類似于找到的 .gitignore 檔案) ,可防止 Live Share 開啟來賓的特定檔案或資料夾。 請注意,這種情況包含的案例包括來賓 ,或跳到您的編輯位置,在共同作業進行期間逐步執行檔案,任何程式碼流覽功能,例如 [移至定義] 等等。 它適用于您不想在任何情況下共用的檔案,例如包含秘密、憑證或密碼的檔案。 例如,因為它們控制安全性,所以一律會排除檔案上的 .vsls.js。

HideFiles 屬性很類似,但不太像嚴格。 這些檔案只會隱藏在檔案樹狀目錄中。 例如,如果您在進行偵錯工具時遇到上述其中一個檔案的情況,它仍會在編輯器中開啟。 如果您使用不同的原始檔控制系統) ,或只想要增強已存在的檔案,以避免混亂或混淆,這個屬性就很有用。如果您沒有 .gitignore 檔案安裝 (就是這樣的情況。

.gitignore 設定會建立 Live Share 應該如何處理共用資料夾中 .gitignore 檔案的內容。 依預設,在. .gitignore 檔案中找到的任何 glob 都會被視為在 "hideFiles" 屬性中指定。 不過,您可以使用下列其中一個值來選擇不同的行為:

選項 結果
none 。檔案樹狀結構中的來賓可以看到 .gitignore 內容 (假設) 的來賓編輯器設定未篩選這些內容。
hide 預設值。 Glob 內部. .gitignore 的處理方式就如同它們是在 "hideFiles" 屬性中。
exclude Glob 內部. .gitignore 的處理方式就如同它們是在 "excludeFiles" 屬性中。

設定的缺點 exclude 是經常 .gitignore node_modules 資料夾的內容,但在偵錯工具中逐步執行時可能會很有用。 因此,Live Share 支援在 excludeFiles 屬性中使用 "!" 反轉規則的功能。 例如,此 .vsls.json 檔案會排除 ". .gitignore" 中的所有專案,但 node_modules 除外:

{
    "$schema": "http://json.schemastore.org/vsls",
    "gitignore":"exclude",
    "excludeFiles":[
        "!node_modules"
    ]
}

隱藏和排除規則會分開處理,因此,如果您仍然想要隱藏 node_modules 來減少雜亂,而不實際將它排除,您可以直接編輯檔案,如下所示:

{
    "$schema": "http://json.schemastore.org/vsls",
    "gitignore":"exclude",
    "excludeFiles":[
        "!node_modules"
    ],
    "hideFiles":[
        "node_modules"
    ]
}

.vsls.js子資料夾中的檔案

最後,就像 .gitignore 一樣,檔案上的 .vsls.js也可以放在子資料夾中。 隱藏/排除規則的決定方式是從您已 (共用之根資料夾中的 .vsls.json 檔案開始(如果有) 的話),然後在每個子資料夾上執行,並從該處進入指定的檔案,以尋找要處理的 .vsls.js。 在檔案樹狀目錄中的資料夾中,檔案的 .vsls.js內容,然後補充 (或覆寫在較高層級建立的) 規則。

停用外部檔案共用

根據預設,Live Share 也會共用該主機在共用資料夾/解決方案外部開啟的所有檔案。 這可讓您輕鬆快速開啟其他相關檔案,而不需要重新共用。

如果您想要停用這項功能:

  • VS Code 中,將下列內容新增至 settings.js:

    "liveshare.shareExternalFiles": false
    
  • Visual Studio 中,將 > > [共用外部檔案] Live Share 的工具選項設定 > 為 False

唯讀模式

有時候當您以主機的形式共用程式碼時,您不希望來賓進行編輯。 您可能會需要您的來賓來查看您的一些程式碼,或將您的專案顯示為大量來賓,而不想要進行任何不必要或意外的編輯。 Live Share 提供在唯讀模式中共用專案的能力。

作為主機,在共用時,您可以選擇啟用共同作業會話的唯讀模式。 當來賓加入時,他們將無法對程式碼進行編輯,但您仍然可以看到彼此的資料指標和醒目顯示,也可以流覽整個專案。

您仍然可以在唯讀模式下與來賓共同進行協調。 來賓將無法逐步執行偵錯工具,但仍可新增或移除中斷點,以及檢查變數。 此外,您仍然可以與來賓共用 (唯讀) 的伺服器和終端機。

您可以深入瞭解如何開始唯讀協同作業會話:  VS Code  VS

共同偵錯

當您處理困難的程式碼撰寫問題或錯誤時,在進行調試時有一組額外的眼睛會很有用。 Visual Studio Live Share 可在主機開始進行偵錯工具時,與所有來賓共用偵錯工具,藉此啟用「共同作業」或「共同調試」。

身為主機,您可以完全掌控調試過程啟動或停止的時間,但如果您與不信任的人共用,則共同調試作業會造成一些風險。 Live Share 可讓您邀請的來賓執行主控台/複寫命令,因而有 惡意執行者執行您不想要執行命令的風險

因此,您應該 只與您信任的共用進行共同處理。

深入瞭解:  VS Code  VS

共用本機伺服器

共同偵錯時,能夠存取主持人針對偵錯工作階段所提供的不同應用程式連接埠會非常有用。 您可能想要在瀏覽器中存取應用程式、存取本機資料庫,或從您的工具叫用 REST 端點。 Live Share 可讓您「共用伺服器」,這會將主機機器上的本機通訊埠對應至來賓電腦上完全相同的埠。 以來賓的方式,您可以與應用程式互動,就像是在電腦本機上執行一樣 (例如,主機和來賓都可以存取在上執行的 web 應用 http://localhost:3000) 程式。

不過,作為主機,您應該對與來賓 共用的埠有很大的選擇 ,而且只會共用應用程式埠,而不是系統埠。 對於來賓,共用連接埠的行為就如同該伺服器/服務是在他們自己的機器上執行。 這非常有用,但如果共用不適當的連接埠,也可能有風險。 基於這個理由,Live Share 不會在沒有設定設定和執行動作的主機上進行任何應該共用的相關假設。

在 Visual Studio 中,ASP.NET 專案中指定的 web 應用程式埠 會在進行偵錯工具時 自動共用,以便在執行時協助來賓存取 web 應用程式。 不過,您可以設定工具 > 選項 > Live Share > 「在 debug 上共用 web 應用程式」到「False」(如果您想要的話),來關閉這項自動化。

在 Visual Studio Code 中,Live Share 會嘗試偵測 適當的應用程式埠 並共用它們。 不過,您可以將下列內容新增至 settings.js,以停用此項:

liveshare.autoShareServers: false

在任一種情況下,請小心共用其他埠。

您可以在這裡深入瞭解如何設定此功能:  VS Code  VS

共用終端機

新式開發經常會運用各種命令列工具。 幸運的是,Live Share 可讓身為主持人的您選擇與來賓「共用終端機」。 共用的終端機可以是唯讀或完全共同作業,因此您和您的來賓都能執行命令並看到結果。 做為主機,您可以允許其他共同作業者只查看輸出,或使用任何數目的命令列工具來執行測試、組建,甚至將環境特定的問題分類。

只有主機可以啟動共用終端機,以防止來賓啟動,並執行您不需要或監看的某個工作。 當您啟動共用終端機作為主機時,您可以指定它應該是唯讀或讀取/寫入。 當終端機是讀取/寫入時,包括主持人在內的每個人都可以在終端機中輸入,這樣當來賓在進行您不希望的操作時,您輕鬆就能介入。 不過,為了安全起見,您應該 只在確定來賓確實需要讀取/寫入存取權時才提供此權限,並在您只想要來賓查看您執行之任何命令的輸出時提供唯讀終端機。

在 Visual Studio 中,預設不會共用終端機。 在 VS Code 中,預設會自動將終端機共用為 唯讀。 不過,您可以將下列內容新增至 settings.js,以停用此項:

"liveshare.autoShareTerminals": false

深入瞭解:  VS Code  VS

使用 Microsoft 支援的 工作或學校電子郵件地址 登入時,您可能會在登入時看到訊息指出「 需要管理員核准 」。 這是因為 Live Share 需要對其安全性功能的使用者資訊進行讀取存取,而且您的 Azure AD 租使用者已設定為對存取目錄內容的新應用程式要求「管理員同意」。

您的 AD 系統管理員需要使用下列資訊來為您解決此問題:

這只需要針對使用 Live Share 的任何人進行一次。 請參閱 這裡這裡 以取得詳細資料。

另請參閱

有問題嗎? 請參閱疑難排解提供意見反應