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