微服務(wù) api授權(quán)是什么?
api授權(quán)是什么?最近,我在考慮微服務(wù)網(wǎng)關(guān)的身份驗證和授權(quán),以保護API。我的理解是,當(dāng)客戶端訪問API時,它將由網(wǎng)關(guān)進行身份驗證。如果身份驗證通過,將調(diào)用API。否則,將返回403,用戶將輸入密碼和
api授權(quán)是什么?
最近,我在考慮微服務(wù)網(wǎng)關(guān)的身份驗證和授權(quán),以保護API。我的理解是,當(dāng)客戶端訪問API時,它將由網(wǎng)關(guān)進行身份驗證。如果身份驗證通過,將調(diào)用API。否則,將返回403,用戶將輸入密碼和帳戶進行身份驗證。但我不明白的是,如果這個網(wǎng)站,比如淘寶網(wǎng),不用登錄就可以訪問,那么這個API就不用認(rèn)證客戶端就可以調(diào)用了,這和上面對認(rèn)證和授權(quán)的理解是不同的,或者其他API接口的授權(quán)和認(rèn)證意味著別的什么。
企業(yè)級微服務(wù)架構(gòu)下API保護和控制層如何做?
在spring云方面,要實現(xiàn)API的認(rèn)證和保護,需要與JWT技術(shù)(無狀態(tài))合作。一般有兩種方法:
方法一:
直接在網(wǎng)關(guān)中設(shè)置各種過濾器,配置一定的路由攔截規(guī)則,將部分用戶認(rèn)證碼編碼到網(wǎng)關(guān)中,實現(xiàn)網(wǎng)關(guān)端的初步認(rèn)證和認(rèn)證。這意味著超過90%的系統(tǒng)認(rèn)證是在網(wǎng)關(guān)上進行的。所有客戶端都請求網(wǎng)關(guān)的地址,而不是微服務(wù)的實際地址。當(dāng)請求通過nginx到達springcloud網(wǎng)關(guān)時,網(wǎng)關(guān)取出請求的前綴,然后根據(jù)代碼中配置的pre、post、error等過濾器選擇相應(yīng)的過濾器。網(wǎng)關(guān)根據(jù)請求中攜帶的JWT信息,解析后取出憑證信息,如果用戶中心返回正確結(jié)果,則執(zhí)行用戶定義的登錄認(rèn)證邏輯(一般網(wǎng)關(guān)服務(wù)調(diào)用用戶中心服務(wù)進行檢查),網(wǎng)關(guān)服務(wù)接收響應(yīng)結(jié)果,向篩選器返回NULL,并請求繼續(xù)向其他微服務(wù)發(fā)送。執(zhí)行相應(yīng)的業(yè)務(wù)邏輯后,相應(yīng)的業(yè)務(wù)服務(wù)將結(jié)果返回給網(wǎng)關(guān),網(wǎng)關(guān)通過nginx將結(jié)果返回給客戶端。
方法二:原理同上,區(qū)別在于一個新的微服務(wù)叫做用戶授權(quán)認(rèn)證中心。當(dāng)請求到來時,網(wǎng)關(guān)只做最基本的請求驗證,如JWT格式是否合法,JWT是否過期,不再對用戶進行認(rèn)證操作,即不在網(wǎng)關(guān)中查詢用戶,而是調(diào)用用戶授權(quán)認(rèn)證中心,通過必要的參數(shù)到中心對應(yīng)的HTTP方法中,請求后得到結(jié)果并返回給網(wǎng)關(guān),然后網(wǎng)關(guān)給出客戶端特定的信息,如果認(rèn)證失敗,將返回給客戶端。如果身份驗證成功,它將在網(wǎng)關(guān)篩選器中釋放。這意味著網(wǎng)關(guān)的工作要少得多,90%以上的認(rèn)證操作都在授權(quán)認(rèn)證中心進行。
這兩種方法都可以使用,但建議使用第二種方法,這更符合微服務(wù)的理念。第一種適用于項目的初始階段。當(dāng)規(guī)模不大時,可以暫時使用。當(dāng)流量出現(xiàn)時,網(wǎng)關(guān)將無法承受,因此從長遠(yuǎn)來看,需要開通新的微服務(wù)來分流流量。