您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)如何理解SCP Application Router,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
簡(jiǎn)單解釋一下主要的參數(shù):
Routes
source:可以是一個(gè)URL,也可以是一個(gè)正則表達(dá)式,定義了當(dāng)前的route是匹配什么樣的請(qǐng)求路徑
target: 當(dāng)前請(qǐng)求如何被重寫到目標(biāo)地址
destination: 當(dāng)前請(qǐng)求路由到manifest中的哪個(gè)目標(biāo)地址
authenticationType: 有三種選擇,xsuaa, none和basic,xsuaa和none分別代表了是否對(duì)當(dāng)前請(qǐng)求在App Router上做用戶安全認(rèn)證,下一節(jié)會(huì)具體介紹。Basic是和SAP HANA集成的時(shí)候提供默認(rèn)的安全驗(yàn)證支持。
Destination
Name:用來跟xs-app.json中的destination配置相匹配
URL:目標(biāo)應(yīng)用程序真實(shí)的Clould Foundry地址
ForwardAuthToken: 如果請(qǐng)求中帶有oauth token,是否將oauth token轉(zhuǎn)發(fā)給目標(biāo)應(yīng)用程序. App Router也支持oauth token的部分校驗(yàn)功能,所以用戶也可以根據(jù)具體情況選擇不轉(zhuǎn)發(fā)oauth token,就在App Router端校驗(yàn)
除了基本的路由功能,App Router還提供了豐富的Web應(yīng)用程序相關(guān)的功能支持,比如連接管理,session管理,擴(kuò)展http頭,跨域,Web Socket等等。
如上一節(jié)提到的,App Router在路由的時(shí)候提供了用戶的安全認(rèn)證支持。將路由的Authentication Type配置為xsuaa,App Router則會(huì)檢查前端發(fā)過來的請(qǐng)求是否帶有合法的session。如果沒有,App Router會(huì)將用戶導(dǎo)向SCP UAA的用戶認(rèn)證界面,當(dāng)用戶重新認(rèn)證成功之后,會(huì)生成新的合法session,并將此session返回給前端應(yīng)用程序。
整個(gè)認(rèn)證的流程是是SCP App Router和SCP UAA協(xié)同完成的,SCP UAA是SAP對(duì)Cloud Foundry上提供的安全組件UAA (User Account and Authentication Service)的一個(gè)封裝,Cloud Foundry UAA是一個(gè)實(shí)現(xiàn)了標(biāo)準(zhǔn)Oauth 2.0協(xié)議的authorization server,SAP在此基礎(chǔ)上做了一些自定義的增強(qiáng),但是在接口上和原生的UAA保持了一致,這樣可以盡可能的對(duì)OAuth Client端程序提供兼容性。
Cloud Foundry UAA官方文檔:
https://docs.cloudfoundry.org/api/uaa/version/4.10.0/index.html#overview
SCP標(biāo)準(zhǔn)的OAuth3.0流程:
如果熟悉OAuth3.0協(xié)議,從這張流程圖上很快就能看出App Router和UAA之間是通過Authorization Code Grant Flow來交互的,在交互過程中它們分別充當(dāng)了OAuth Client和OAuth Server的角色。
關(guān)于OAuth3.0,請(qǐng)參見: https://oauth.net/2/
看到這里您也許會(huì)問,為什么不是前端瀏覽器作為OAuth Client?除了安全性的考慮, App Router將OAuth流程對(duì)前端隱藏的另一個(gè)好處是,各種前端應(yīng)用程序不需要知道UAA上諸如Client ID, Client Secret的細(xì)節(jié),提供了更好的安全性。
其次還有SAP在產(chǎn)品層面的考量,為了其標(biāo)準(zhǔn)的產(chǎn)品在UI技術(shù)上的一致性,包括SCP上的產(chǎn)品在內(nèi)大多數(shù)都是基于SAP UI5來構(gòu)建前端UI,而UI5又是基于HTML5技術(shù)而來,即這些產(chǎn)品都是基于瀏覽器的富客戶端應(yīng)用。如此一來,在標(biāo)準(zhǔn)的App Router里面實(shí)現(xiàn)OAuth3.0流程可以使SAP的各種前端應(yīng)用并不需要關(guān)注認(rèn)證流程的細(xì)節(jié)。如上圖所示,App Router在完成了認(rèn)證流程并最終拿到token之后,并沒有將token返回給瀏覽器端,而是在App Router上生成一個(gè)session,并且將session和token關(guān)聯(lián)起來,App Router在這里起到一個(gè)中介者的角色,對(duì)于前端統(tǒng)一用session進(jìn)行交互,對(duì)于后端統(tǒng)一用token進(jìn)行交互。
SCP除了將標(biāo)準(zhǔn)的實(shí)現(xiàn)默認(rèn)支持瀏覽器端應(yīng)用程序外,作為一個(gè)開放的平臺(tái),當(dāng)然也支持移動(dòng)端原生應(yīng)用程序的集成,這里不作贅述,具體細(xì)節(jié)可以參考SCP的開發(fā)文檔。
App Router上的session管理利用了Node.js的session-express框架,默認(rèn)將session緩存在instance memory中(下圖第79行):
然后采用session stickiness策略來保證在多實(shí)例部署的情況下,相同會(huì)話的請(qǐng)求會(huì)被發(fā)送到同一個(gè)實(shí)例上以保證會(huì)話能繼續(xù)進(jìn)行。
Session Stickiness:
https://stackoverflow.com/questions/10494431/sticky-and-non-sticky-sessions
這樣做的好處是既利用了instance memory的高性能,也可以在一定程度上保證高可靠性。不過代價(jià)是犧牲了動(dòng)態(tài)伸縮的能力,一旦某個(gè)App Router實(shí)例上還有正在使用中的session,這個(gè)實(shí)例就不能被關(guān)閉。
好在App Router使用的是開源的express-session框架,該框架并非只能將session存儲(chǔ)在instance memory中,在Node.js開源社區(qū)已經(jīng)提供了多種express-session的外部存儲(chǔ)方案。至少在技術(shù)上,可以將App Router提供的instance memory存儲(chǔ)替換為外部存儲(chǔ),而不需要做太多的定制化開發(fā),這樣一來多個(gè)App Router實(shí)例就可以共享同一套session存儲(chǔ)。
只要說到SAP的產(chǎn)品,extensibility是一個(gè)不可避免的話題,這是由SAP的業(yè)務(wù)是面向企業(yè)級(jí)客戶這一特質(zhì)決定的。SAP也一直致力于從平臺(tái)到框架,再到上層的產(chǎn)品,盡可能多的給SAP客戶提供良好的可擴(kuò)展性。App Router同樣也不例外,因?yàn)橹苯邮褂昧薔ode.js的connect框架,這是一款本身就提供了豐富擴(kuò)展的中間件框架,可以通過可插拔的方式對(duì)Node.js的請(qǐng)求和響應(yīng)提供過濾和攔截,具體大家可以參考connect的主頁。
App Router基于connect,當(dāng)然App Router的用戶就可以直接獲得connect提供的各種中間件,除此之外App Router還提供了自己的一些中間件:
是不是非常簡(jiǎn)單和直接?使用這些中間件而不需要修改原生App Router里面的代碼。
這里不再對(duì)App Router上的各種中間件一一贅述。
總結(jié)說來,App Router是一款設(shè)計(jì)簡(jiǎn)單,使用方便,提供了良好可擴(kuò)展性的反向代理組件,為廣大SAP用戶在SCP上開發(fā)應(yīng)用程序提供了更多的選擇和方便。
上述就是小編為大家分享的如何理解SCP Application Router了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。