温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何理解SCP Application Router

发布时间:2021-11-22 18:06:24 来源:亿速云 阅读:126 作者:柒染 栏目:云计算

这期内容当中小编将会给大家带来有关如何理解SCP Application Router,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。


    如何理解SCP Application Router

    简单解释一下主要的参数:

    Routes

    • source:可以是一个URL,也可以是一个正则表达式,定义了当前的route是匹配什么样的请求路径

    • target: 当前请求如何被重写到目标地址

    • destination: 当前请求路由到manifest中的哪个目标地址

    • authenticationType: 有三种选择,xsuaa, none和basic,xsuaa和none分别代表了是否对当前请求在App Router上做用户安全认证,下一节会具体介绍。Basic是和SAP HANA集成的时候提供默认的安全验证支持。

    Destination

    • Name:用来跟xs-app.json中的destination配置相匹配

    • URL:目标应用程序真实的Clould Foundry地址

    • ForwardAuthToken: 如果请求中带有oauth token,是否将oauth token转发给目标应用程序. App Router也支持oauth token的部分校验功能,所以用户也可以根据具体情况选择不转发oauth token,就在App Router端校验

    除了基本的路由功能,App Router还提供了丰富的Web应用程序相关的功能支持,比如连接管理,session管理,扩展http头,跨域,Web Socket等等。

    App Router和SCP UAA的安全集成

    如上一节提到的,App Router在路由的时候提供了用户的安全认证支持。将路由的Authentication Type配置为xsuaa,App Router则会检查前端发过来的请求是否带有合法的session。如果没有,App Router会将用户导向SCP UAA的用户认证界面,当用户重新认证成功之后,会生成新的合法session,并将此session返回给前端应用程序。

    整个认证的流程是是SCP App Router和SCP UAA协同完成的,SCP UAA是SAP对Cloud Foundry上提供的安全组件UAA (User Account and Authentication Service)的一个封装,Cloud Foundry UAA是一个实现了标准Oauth 2.0协议的authorization server,SAP在此基础上做了一些自定义的增强,但是在接口上和原生的UAA保持了一致,这样可以尽可能的对OAuth Client端程序提供兼容性。

    Cloud Foundry UAA官方文档:

    https://docs.cloudfoundry.org/api/uaa/version/4.10.0/index.html#overview

    SCP标准的OAuth3.0流程:

    如何理解SCP Application Router

    如果熟悉OAuth3.0协议,从这张流程图上很快就能看出App Router和UAA之间是通过Authorization Code Grant Flow来交互的,在交互过程中它们分别充当了OAuth Client和OAuth Server的角色。

    关于OAuth3.0,请参见: https://oauth.net/2/

    看到这里您也许会问,为什么不是前端浏览器作为OAuth Client?除了安全性的考虑, App Router将OAuth流程对前端隐藏的另一个好处是,各种前端应用程序不需要知道UAA上诸如Client ID, Client Secret的细节,提供了更好的安全性。

    其次还有SAP在产品层面的考量,为了其标准的产品在UI技术上的一致性,包括SCP上的产品在内大多数都是基于SAP UI5来构建前端UI,而UI5又是基于HTML5技术而来,即这些产品都是基于浏览器的富客户端应用。如此一来,在标准的App Router里面实现OAuth3.0流程可以使SAP的各种前端应用并不需要关注认证流程的细节。如上图所示,App Router在完成了认证流程并最终拿到token之后,并没有将token返回给浏览器端,而是在App Router上生成一个session,并且将session和token关联起来,App Router在这里起到一个中介者的角色,对于前端统一用session进行交互,对于后端统一用token进行交互。

    SCP除了将标准的实现默认支持浏览器端应用程序外,作为一个开放的平台,当然也支持移动端原生应用程序的集成,这里不作赘述,具体细节可以参考SCP的开发文档。

    App Router上的session管理

    App Router上的session管理利用了Node.js的session-express框架,默认将session缓存在instance memory中(下图第79行):

    如何理解SCP Application Router

    然后采用session stickiness策略来保证在多实例部署的情况下,相同会话的请求会被发送到同一个实例上以保证会话能继续进行。

    Session Stickiness:

    https://stackoverflow.com/questions/10494431/sticky-and-non-sticky-sessions

    这样做的好处是既利用了instance memory的高性能,也可以在一定程度上保证高可靠性。不过代价是牺牲了动态伸缩的能力,一旦某个App Router实例上还有正在使用中的session,这个实例就不能被关闭。

    好在App Router使用的是开源的express-session框架,该框架并非只能将session存储在instance memory中,在Node.js开源社区已经提供了多种express-session的外部存储方案。至少在技术上,可以将App Router提供的instance memory存储替换为外部存储,而不需要做太多的定制化开发,这样一来多个App Router实例就可以共享同一套session存储。

    App Router的可扩展性

    只要说到SAP的产品,extensibility是一个不可避免的话题,这是由SAP的业务是面向企业级客户这一特质决定的。SAP也一直致力于从平台到框架,再到上层的产品,尽可能多的给SAP客户提供良好的可扩展性。App Router同样也不例外,因为直接使用了Node.js的connect框架,这是一款本身就提供了丰富扩展的中间件框架,可以通过可插拔的方式对Node.js的请求和响应提供过滤和拦截,具体大家可以参考connect的主页。

    App Router基于connect,当然App Router的用户就可以直接获得connect提供的各种中间件,除此之外App Router还提供了自己的一些中间件:

    如何理解SCP Application Router

    是不是非常简单和直接?使用这些中间件而不需要修改原生App Router里面的代码。

    这里不再对App Router上的各种中间件一一赘述。

    总结说来,App Router是一款设计简单,使用方便,提供了良好可扩展性的反向代理组件,为广大SAP用户在SCP上开发应用程序提供了更多的选择和方便。

    上述就是小编为大家分享的如何理解SCP Application Router了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI