Azure 應(yīng)用服務(wù)和 Azure Functions 中的身份驗(yàn)證和授權(quán),微軟azure云虛擬服務(wù)器Azure 應(yīng)用服務(wù)和 Azure Functions 中的身份驗(yàn)證和授權(quán)Azure應(yīng)用服務(wù)提供內(nèi)置的身份驗(yàn)證和授權(quán)支持。只需在Web應(yīng)用、RESTful API、移動后端和Azure Functions中編寫少量的代......
Azure應(yīng)用服務(wù)提供內(nèi)置的身份驗(yàn)證和授權(quán)支持。只需在Web應(yīng)用、RESTful API、移動后端和Azure Functions中編寫少量的代碼或根本無需編寫代碼,就能讓用戶登錄和訪問數(shù)據(jù)。本文介紹應(yīng)用服務(wù)如何幫助簡化應(yīng)用的身份驗(yàn)證和授權(quán)。
安全身份驗(yàn)證和授權(quán)需要對安全性(包括聯(lián)合身份驗(yàn)證、加密、JSON Web令牌(JWT)管理、授權(quán)類型等)有深度的了解。應(yīng)用服務(wù)提供這些實(shí)用工具,讓你將更多的時間和精力花費(fèi)在為客戶提供業(yè)務(wù)價值上。
重要
你并非必須使用此功能進(jìn)行身份驗(yàn)證和授權(quán)??梢栽谒x的Web框架中使用捆綁的安全功能,也可以編寫自己的實(shí)用程序。但請記住,Chrome 80針對Cookie對其實(shí)現(xiàn)SameSite的方式進(jìn)行了中斷性變更(發(fā)布日期在2020年3月左右);自定義遠(yuǎn)程身份驗(yàn)證或依賴于跨站點(diǎn)Cookie發(fā)布的其他方案可能會在客戶端Chrome瀏覽器更新時中斷。解決方法很復(fù)雜,因?yàn)樾枰槍Σ煌臑g覽器支持不同的SameSite行為。
應(yīng)用服務(wù)托管的ASP.NET Core 2.1及更高版本已針對此中斷性變更進(jìn)行了修補(bǔ),并且會相應(yīng)地處理Chrome 80和更低版本的瀏覽器。此外,我們還在整個2020年1月在應(yīng)用服務(wù)實(shí)例上部署了ASP.NET Framework 4.7.2的同一修補(bǔ)程序。有關(guān)詳細(xì)信息,請參閱Azure應(yīng)用服務(wù)SameSite Cookie更新。
備注
“身份驗(yàn)證/授權(quán)”功能有時也稱為“簡單身份驗(yàn)證/授權(quán)”。
備注
啟用此功能會導(dǎo)致對應(yīng)用程序的所有非安全HTTP請求自動重定向到HTTPS,而不管強(qiáng)制實(shí)施HTTPS所需的應(yīng)用服務(wù)配置設(shè)置如何。如果需要,可以通過身份驗(yàn)證/授權(quán)設(shè)置配置文件中的requireHttps設(shè)置禁用此功能,但需注意確保不通過非安全HTTP連接傳輸安全令牌。
有關(guān)特定于本機(jī)移動應(yīng)用的信息,請參閱使用Azure應(yīng)用服務(wù)對移動應(yīng)用進(jìn)行用戶身份驗(yàn)證和授權(quán)。
工作原理
在Windows上
身份驗(yàn)證和授權(quán)模塊在應(yīng)用程序代碼所在的同一沙盒中運(yùn)行。啟用后,每個傳入的HTTP請求將通過此模塊,然后由應(yīng)用程序代碼處理。
一個體系結(jié)構(gòu)圖,顯示請求被站點(diǎn)沙盒中的進(jìn)程攔截,該進(jìn)程與標(biāo)識提供者進(jìn)行交互,然后再允許流量發(fā)往已部署的站點(diǎn)
此模塊為應(yīng)用處理多項(xiàng)操作:
·使用指定的提供程序?qū)τ脩暨M(jìn)行身份驗(yàn)證
·驗(yàn)證、存儲和刷新令牌
·管理經(jīng)過身份驗(yàn)證的會話
·將標(biāo)識信息插入請求標(biāo)頭
此模塊獨(dú)立于應(yīng)用程序代碼運(yùn)行,使用應(yīng)用設(shè)置進(jìn)行配置。不需要任何SDK、特定語言,或者對應(yīng)用程序代碼進(jìn)行更改。
用戶/應(yīng)用程序聲明
對于所有語言框架,應(yīng)用服務(wù)都通過將傳入令牌(無論是來自經(jīng)過身份驗(yàn)證的最終用戶還是來自客戶端應(yīng)用程序)中的聲明注入請求標(biāo)頭,使其可供代碼使用。對于ASP.NET 4.6應(yīng)用,應(yīng)用服務(wù)會在ClaimsPrincipal.Current中填充經(jīng)過身份驗(yàn)證的用戶聲明,使你能夠遵循標(biāo)準(zhǔn)的.NET代碼模式(包括[Authorize]屬性)。同樣,對于PHP應(yīng)用,應(yīng)用服務(wù)會填充_SERVER[REMOTE_USER]變量。對于Java應(yīng)用,可從Tomcat servlet訪問聲明。
對于Azure Functions,沒有為.NET代碼填充ClaimsPrincipal.Current,但你仍然可以在請求標(biāo)頭中找到用戶聲明,也可通過請求上下文甚至通過綁定參數(shù)來獲取ClaimsPrincipal對象。有關(guān)詳細(xì)信息,請參閱使用客戶端標(biāo)識。
有關(guān)詳細(xì)信息,請參閱訪問用戶聲明。
備注
目前,ASP.NET Core不支持為當(dāng)前用戶填充身份驗(yàn)證/授權(quán)功能。但是,確實(shí)存在一些第三方開源中間件組件,可以幫助填補(bǔ)這一空白。
令牌存儲
應(yīng)用服務(wù)提供內(nèi)置的令牌存儲,這是與Web應(yīng)用、API或本機(jī)移動應(yīng)用的用戶相關(guān)聯(lián)的令牌存儲庫。對任何提供程序啟用身份驗(yàn)證時,此令牌存儲可立即供應(yīng)用使用。如果應(yīng)用程序代碼需要代表用戶訪問這些提供程序中的數(shù)據(jù),例如:
發(fā)布到經(jīng)過身份驗(yàn)證用戶的MicrosoftAccount時間線
使用Microsoft Graph API讀取用戶的公司數(shù)據(jù)
通常,必須編寫代碼才能在應(yīng)用程序中收集、存儲和刷新這些令牌。使用令牌存儲,只需在需要令牌時才檢索令牌;當(dāng)令牌失效時,可以告知應(yīng)用服務(wù)刷新令牌。
將為經(jīng)身份驗(yàn)證的會話緩存ID令牌、訪問令牌和刷新令牌,它們只能由關(guān)聯(lián)的用戶訪問。
如果不需要在應(yīng)用中使用令牌,可以在應(yīng)用的“身份驗(yàn)證/授權(quán)”頁中禁用令牌存儲。
日志記錄和跟蹤
如果啟用應(yīng)用程序日志記錄,將在日志文件中直接看到身份驗(yàn)證和授權(quán)跟蹤。如果出現(xiàn)意外的身份驗(yàn)證錯誤,查看現(xiàn)有的應(yīng)用程序日志即可方便找到所有詳細(xì)信息。如果啟用失敗請求跟蹤,可以確切地查看身份驗(yàn)證和授權(quán)模塊在失敗請求中發(fā)揮的作用。在跟蹤日志中,找到對名為EasyAuthModule_32/64的模塊的引用。
標(biāo)識提供者
應(yīng)用服務(wù)使用聯(lián)合標(biāo)識,在其中,第三方標(biāo)識提供者會為你管理用戶標(biāo)識和身份驗(yàn)證流。默認(rèn)提供五個標(biāo)識提供者:
對其中一個提供程序啟用身份驗(yàn)證和授權(quán)時,其登錄終結(jié)點(diǎn)可用于用戶身份驗(yàn)證,以及驗(yàn)證來自提供程序的身份驗(yàn)證令牌??梢暂p松為用戶提供其中任意數(shù)量的登錄選項(xiàng)。
存在舊版可擴(kuò)展性路徑,用于與其他標(biāo)識提供者或自定義身份驗(yàn)證/授權(quán)解決方案集成,但是不建議使用,而應(yīng)考慮使用OpenID Connect支持。
身份驗(yàn)證流
身份驗(yàn)證流對于所有提供程序是相同的,但根據(jù)是否要使用提供程序的SDK登錄而有所差別:
·不使用提供程序SDK:應(yīng)用程序向應(yīng)用服務(wù)委托聯(lián)合登錄。瀏覽器應(yīng)用通常采用此方案,這可以防止向用戶顯示提供程序的登錄頁。服務(wù)器代碼管理登錄過程,因此,此流也稱為“服務(wù)器導(dǎo)向流”或“服務(wù)器流”。此方案適用于瀏覽器應(yīng)用。它也適用于使用移動應(yīng)用客戶端SDK登錄用戶的本機(jī)應(yīng)用,因?yàn)镾DK會打開Web視圖,使用應(yīng)用服務(wù)身份驗(yàn)證將用戶登錄。
·使用提供程序SDK:應(yīng)用程序手動將用戶登錄到提供程序,然后將身份驗(yàn)證令牌提交給應(yīng)用服務(wù)進(jìn)行驗(yàn)證。無瀏覽器應(yīng)用通常采用此方案,這可以防止向用戶顯示提供程序的登錄頁。應(yīng)用程序代碼管理登錄過程,因此,此流也稱為“客戶端導(dǎo)向流”或“客戶端流”。此方案適用于REST API、Azure Functions和JavaScript瀏覽器客戶端,以及在登錄過程中需要更高靈活性的瀏覽器應(yīng)用。它還適用于使用提供程序SDK登錄用戶的本機(jī)移動應(yīng)用。
備注
對于應(yīng)用服務(wù)中受信任瀏覽器應(yīng)用對應(yīng)用服務(wù)或Azure Functions中另一REST API的調(diào)用,可以使用服務(wù)器導(dǎo)向流對其進(jìn)行身份驗(yàn)證。有關(guān)詳細(xì)信息,請參閱在應(yīng)用服務(wù)中自定義身份驗(yàn)證和授權(quán)。
下表說明了身份驗(yàn)證流的步驟。
對于客戶端瀏覽器,應(yīng)用服務(wù)可自動將所有未經(jīng)身份驗(yàn)證的用戶定向到/.auth/login/lt;providergt;。還可以向用戶提供一個或多個/.auth/login/lt;providergt;鏈接,讓他們使用所選的提供程序登錄到你的應(yīng)用。
授權(quán)行為
在Azure門戶中,當(dāng)傳入請求未經(jīng)過身份驗(yàn)證時,可以使用多種行為配置應(yīng)用服務(wù)授權(quán)。
一個屏幕截圖,顯示“請求未通過身份驗(yàn)證時要采取的操作”下拉列表
以下標(biāo)題介紹了選項(xiàng)。
允許匿名請求(無操作)
此選項(xiàng)將對未經(jīng)身份驗(yàn)證的流量的授權(quán)交給應(yīng)用程序代碼處理。對于經(jīng)過身份驗(yàn)證的請求,應(yīng)用服務(wù)還會在HTTP標(biāo)頭中一起傳遞身份驗(yàn)證信息。
使用此選項(xiàng)可以更靈活地處理匿名請求。例如,可以向用戶提供多個登錄提供程序。但是,必須編寫代碼。
僅允許經(jīng)過身份驗(yàn)證的請求
選項(xiàng)是“使用provider登錄”。應(yīng)用服務(wù)將所有匿名請求重定向到所選提供程序的/.auth/login/provider。如果匿名請求來自本機(jī)移動應(yīng)用,則返回的響應(yīng)為HTTP 401 Unauthorized。
使用此選項(xiàng)不需要在應(yīng)用中編寫任何身份驗(yàn)證代碼。可以通過檢查用戶的聲明來處理精細(xì)授權(quán),例如角色特定的授權(quán)(請參閱訪問用戶聲明)。
注意
以這種方式限制訪問適用于對應(yīng)用的所有調(diào)用,對于想要主頁公開可用的應(yīng)用程序來說,這可能是不可取的,就像在許多單頁應(yīng)用程序中一樣。
備注
默認(rèn)情況下,Azure AD租戶中的任何用戶都可以從Azure AD請求應(yīng)用程序的令牌。若要僅允許一組定義的用戶訪問應(yīng)用,可以在Azure AD中配置應(yīng)用程序。
特別聲明:以上文章內(nèi)容僅代表作者本人觀點(diǎn),不代表ESG跨境電商觀點(diǎn)或立場。如有關(guān)于作品內(nèi)容、版權(quán)或其它問題請于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號密碼登錄
平臺顧問
微信掃一掃
馬上聯(lián)系在線顧問
小程序
ESG跨境小程序
手機(jī)入駐更便捷
返回頂部