`
ferreousbox
  • 浏览: 284778 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

阿里软件平台之个人剖析

阅读更多

    阿里软件平台作为一种新的SAAS架构在基于阿里平台和淘宝平台庞大用户的基础上在这一年的时间里得到了极大的关注,越来越多的软件开发者开发出自己的软件来服务于用户,体现了SAAS的价值。相信也有很多后来者想了解和熟悉这个平台并开发自己的应用,本人在阿里平台推出之初就开始关注,只是一直没有时间真正的来研究它,最近好好的研究了番,决定把自己的心得写出来给后来者或有经验者参考,理解或说错的地方还请大家见谅和指正(以下说明均是针对REST风格的请求而言,对于WEBSERVICE等其他方式则不在讨论之列)。

 

    首先得理解阿里平台里的几个概念:
SIP:service integration platform,即服务集成平台,作为中心处理各个服务请求,这里指的就是阿里软件平台;
ISV:independency software vendor,独立软件厂商,是提供最终给用户使用的软件的开发者;
ISP:internet service provider,互联网服务提供商,是提供开放API的厂商或开发者,如淘宝;

 

    整个平台运行由这三个部分参与,ISV对SIP发起服务请求,SIP经过一系列判断后将请求转发给ISP对应的服务,然后获取结果并返回给ISV,从而完成一次服务请求过程。SIP作为中心处理器负责维护ISV和ISP的相关信息,对于ISV就是软件的APPKEY和CERTCODE(相当于访问SIP的用户名和密码);对于ISP就是维护API的相关信息,如名称和请求URL的对应关系,授权信息等(个人揣测);SIP本身则负责基本校验(签名校验)、订购/购买、付费、授权/鉴权等操作。

 

    下面说说应用阿里平台中几个需要理解和注意的地方,有些是根据个人的经验进行的揣测。

 

一、免登陆


    免登陆主要是用来让终端用户通过阿里平台来免登陆到ISV的系统,仅此而已,没有其他用处。这样的好处就是用户在进入你的系统时不需要再次使用你提供的用户名和密码进行二次登陆了,简化了ISV系统的应用接入;从ISV的系统角度来讲,系统内部的东西是需要用户登陆后才能够进行的,相信很少或基本没有ISV的应用是可以直接进入的吧,而进入在WEB系统而言就是创建SESSION来识别用户,所以免登陆的用处还在于帮助ISV的系统进行用户的SESSION创建和授权操作。

 

我们来看下免登陆的操作流程:

 

1.终端用户登陆阿里平台,通过软件列表中的“进入使用”操作向阿里平台请求使用该ISV的软件;

 

2.SIP获取当前用户的ID、ISV软件的信息、用户订购的信息和自动生成的令牌TOKEN向ISV软件的入口发起登陆请求;

 

3.ISV软件获取对应的参数并马上回调SIP的免登陆接口进行确认,只有当SIP返回确认该请求是由SIP自身发起的,ISV的软件才应该认为该用户是正常的软件用户(包括订购者和使用者)。在确认成功后ISV的软件即可以为该用户创建SESSION并进行自己的业务授权了,从而完成用户对ISV软件的登录过程。

 

    通过这3个过程我们就可以避免非法用户对ISV软件的登录接口就行假登陆操作,因为在第3步中我们总是对SIP的网站发出请求进行验证,因而我们也总是相信该返回值的合法性,除非发生了域名劫持现象,呵呵。

 


二、开放API的调用


    阿里平台上的开放API有三种类型,apiType=1,只需要签名即可;apiType=2,需要签名同时需要终端用户对ISV软件进行人工授权操作;apiType=3,需要签名,用户授权可选,如果授权了可能从该API获取的数据信息就更多,否则只能够获取基本信息;

 

1.对于apiType=1的API调用


    对该类型的API调用就很方便了,只需要对请求参数进行签名后直接HTTP POST到SIP上去即可获得结果,终端用户在整个过程中无需干预,比如淘宝的商品搜索服务就是该类型的API。

 

2.对于apiType=2的API调用


    该类型的API调用需要终端用户手工授权,授权的意思就是当前终端用户允许当前这个应用可以调用该ISP中需要授权的开放API,其实也就是通过用户授权来绑定当前应用与ISP的API。授权首先需要终端用户登陆到ISP的系统中(比如淘宝ISP就需要终端用户使用淘宝的账号登陆淘宝系统)进行授权,授权和鉴权的过程由于隐藏在阿里平台的后端,我们无法得知,但根据相关的信息我揣测的过程如下(假设鉴权过程发生在SIP平台中):

 

    首先看下ISV和SIP的交互过程:


    1)ISV软件向SIP发起一个API调用请求;


    2)SIP检查该API并确认为apiType=2的情况下进行鉴权操作;


    3)如果请求的参数中没有携带sip_sessionid参数则返回1012错误,必须指定sip_sessionid


    4)根据sip_appkey和sip_sessionid在SIP平台中查找授权信息,没有找到或授权超时则返回1004错误,同时返回登录URL让ISV引导用户到该登陆地址进行登陆;如果鉴权成功则附带SIP和ISP之间的TOKEN后向ISP发起请求并获知结果返回给ISV;


    5)鉴权过程结束;

 

    然后看下在鉴权失败时SIP和ISP的交互过程,此时SIP已经返回1004错误给ISV了,ISV将引导用户进入给定的URL地址:


    1)ISV引导用户进入SIP返回的URL地址(错误1004返回的),此时的URL还是SIP的地址;


    2)SIP根据sip_apiname参数查找对应的ISP的登录验证地址并重定向到ISP的登录页面,同时传递根据sip_appkey和sip_sessionid等参数按照一定规则生成的TOKEN,并在SIP平台中保存这种对应关系;


    3)用户使用该ISP的账号进行登陆,比如淘宝作为一个ISP就需要用户使用淘宝账号进行登陆;


    4)登陆成功后,用户选择授权时间(1小时、30分钟、10分钟、5分钟等)提交;


    5)ISP将用户的授权时间、SIP在第2步中传递给ISP的TOKEN等信息传递给SIP的特定URL,这个过程中ISP只能够通过特定IP的服务器发起该请求才会被SIP受理(根据阿里平台的1019错误推测),否则将被SIP拒绝;


    6)SIP接到ISP的授权请求后,根据TOKEN将授权信息与sip_appkey、sip_sessionid进行绑定,从而完成授权过程;同时ISP将当前用户信息和SIP传递过来的sip_appkey、sip_sessionId也在自己的平台中进行绑定;

 

    整个鉴权/授权过程是一个连续的过程,授权需要用户的干预是为了保证信息的安全,我看到有人在论坛问为什么不能够通过API进行自动授权,如果这样其实就没有授权的必要了,我觉得这个设计非常好,恰如其分的联合了SIP、ISV、ISP和用户。另外,对于需要授权的API都需要传递sip_sessionid是为了绑定用户进行鉴权,让SIP知道当前来自ISV的请求是某一个特定用户的,同时也是为了让ISP根据sip_sessionid知道当前请求的是系统中的哪个用户,因为在上面的SIP和ISP的交互过程中的第6步中ISP已经绑定了用户信息和sip_appkey、sip_sessionId的对应关系,因此通过sip_appkey、sip_sessionId就可以唯一确定一个用户了。


    如果鉴权过程发生在ISP平台上的话,那么SIP就不需要绑定用户和授权信息了,而是通过ISP注册时的鉴权URL进行鉴权操作,当然这过程中为了保证数据的安全性也会进行加密/签名等步骤。基本过程估计都差不多,不过本人更倾向于前面的方案。

 

    授权完成后(也可称为用户和SIP的绑定),在授权的时间里ISV发起对该ISP的API调用就不需要再进行授权操作了,从而也就是完成了用户对ISP的登录。以上过程是根据个人经验推测得到,如果不对还请大家指正。

 

 

三、ISV系统的权限分级


    对于ISV开发的系统如果功能很多,终端用户也有可能有权限划分的需求,因为用户在订购了ISV的软件后,他还可以设置使用该订购实例的用户,即一个订购实例可以被多个人同时使用,因此提供权限分级管理对于大型软件也是有必要的。进行权限设计要考虑到以下问题:

 

1.如何获取所有订购了该软件的用户;


  对于这个问题可以有2种解决方案:


  1)每个ISV的软件都有一个通知URL设置,这个是用户在软件超市中订购了软件后,阿里平台回调ISV系统的一个接口。该接口向通知URL传递用户的ID、软件实例的ID等信息。通过阿里平台的介绍,我们可以把实例ID(appInstanceId)当成一个组织或公司,拥有同样appInstanceId的用户都是同一个软件实例的使用者。在这里平台中将软件的用户分成2种类型,一是软件的订购者,可以认为是管理员;再一个就是软件的使用者,是由订购者邀请一起使用软件的其他用户,可以认为是一般用户。


  2)再一种方式就是用户在进行免登陆时通过alisoft.getUsingUse接口来获取当前用户所代表的实例的所有用户,然后存入ISV自己的数据库中。该接口只返回了用户ID和用户名称,然后我们可以通过alisoft.validateAppUser接口来获知用户在这个实例中代表的类型,可以查到谁是软件的订购者,谁是使用者。这种方式可以用来通知URL中处理异常时的有效补充。

 

2.如何区分用户所属的公司或组织;


    在1中已经介绍了,每一个appInstanceId都可以认为是一个组织或公司,而该实例的订购者则是该组织或公司的管理员,其他的则是普通的用户。

 

    解决了以上的问题后,我们权限系统的用户和组织、组织的管理员和一般用户等基本信息就都有了,然后在系统内部就是管理员按照权限来划分功能菜单给指定的用户了,这就是一般权限系统的设计过程了,就不多说了。


    以上几点是针对开发者需要注意的几点问题对阿里平台的一点剖析,希望对大家更深入的理解这个平台起到帮助作用,希望和大家一起交流:biqiang.ma@gmail.com

 

1
0
分享到:
评论

相关推荐

    费用报销管理软件

    企业云与阿里云合作,使用阿里云盾系统为企业云提供阿里巴巴平台级的安全保障,阻止来自外部的安全威胁; 2 软硬件安全措施 盾硬件加密,银行级别帐户安全保护,保证您的帐户安全; 密码加密传输与存储,防止窃取...

    2021 QECon全球软件质量&效能大会(上海站)PPT汇总(57份).zip

    从数据到知识:智能化软件开发实践之路 全面拥抱云化,云原生技术下的测试新形态 深度代码分析驱动效能提升实践 新一代研发效能中台的设计与实现 AI技术在自动化测试中的应用与实践 二、测试自动化 捷信QE团队...

    软件测试高频面试题思维导图

    更多 web自动化测试、app自动化测试、接口自动化测试、测试平台开发、持续集成、持续交付、覆盖率分析、代码插桩、前沿技术方面资料可以加我领取 如果需求阿里、百度、腾讯、字节跳动、京东、金山、拼多多等名企...

    基于阿里天池大赛学习赛的天猫复购预测案例,基于赛题搭建的Hadoop+spark平台上进行项目设计实现+源代码+文档说明+数据集

    本项目基于阿里天池大数据竞赛的天猫复购预测学习赛,基于赛题,我们首先对数据进行分析和可视化并得出结论,然后从数据集中提取可能对预测标签有影响的特征形成新的训练集,然后搭建了Hadoop+spark集群进行算法设计...

    阿里云认证的项目-Python的数据科学分析实战,足球运动员特征分析+源代码+文档说明

    该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! ...

    软件系统整体设计方案.docx

    智能推荐: 能够较为精准的推送给用户感兴趣的应用 行为分析: 分析用户使用APP的类型和频次,分析用户会感兴趣的事物 线下互动: 定期组织同一圈子用户的线下互动活动,与线上的行为分析 互相补充 软件系统整体设计...

    商淘软件B2B2C多用户商城系统 v2.1.1.zip

    系统拥有PC、手机WAP、微商城、安卓APP、苹果APP、微信小程序,六端合一,六端互通,并有无缝对接的开源IM客服系统,真正实现全网营销,极其适合企业及个人快速上线商务平台。 系统代码清晰易懂,大量的可视化报表...

    修改ubuntu 18.04的sources.list源为阿里或清华镜像的方法

    选择合适的源,替换原文件的内容,保存编辑好的文件, 以阿里云更新服务器为例(从实际测试上结果分析,个人认为阿里云比网易和搜狐的服务器要快): sudo vim /etc/apt/sources.list 3. 阿里云镜像源-清华镜像源 ...

    POPNETSOFT游戏点卡在线销售平台

    强大的库存分析系统,让您完全了解商品的库存状况. ☆ 强大的客户管理系统,让您有所有的权限管理客户的帐户开通、冻结、修改等. ☆ 整合云网在线支付平台. ☆ 整合阿里巴巴支付宝支付及时到帐接口. ☆ ...

    基于python实现的对历年世界杯信息进行数据分析可视化+源代码+说明

    数据来源于阿里云天池实验室,对历年世界杯信息进行数据分析可视化 此数据分析的数据集包括世界杯成绩信息表:worldcupssummary;世界杯比赛比分汇总表:worldCupMatches;世界杯球员信息表:WorldcupsPlayers - 不...

    UML和模式应用

    全书叙述清晰、用词精炼、构思巧妙,将面向对象分析设计的概念、过程、方法、原则和个人的实践建议娓娓道来,以实例为证,将软件的分析和设计的过程叙述得如逻辑推理一般,于细节处见真知。《UML和模式应用(原书第3...

    Java社区诊所护工管理系统的设计与实现

    内容概要:通过带着读者从前期的需求分析、系统的设计和测试出发,最终完成了对系统整个后台体系结构的研究与实现,主要研究了社区诊所护工管理系统的后台设计,通过运用 Java 语言、MySQL 数据库和阿里云虚拟服务器...

    毕业设计-认证营销平台(源代码+说明)

    采用开源GPL许可证,任何个人和公司都可以免费下载、安装和使用本系统,没有限制,也没有许可费用。 使用PHP语言开发,可以运行在windows和linux系统上,也可以在阿里云等云服务器上部署。 支持与所有wifidog的...

    股权投资成功案例分析.doc

    比较典型也是我们比较熟悉的有蒙牛股份、无锡尚德、永乐电器、雨润食品、中星微、千橡互动、国人通信、盛大、百度、携程、阿里巴巴、掌上灵通、前程无忧、易趣、卓越网、空中网、分众传媒、太平洋人寿、联想、卡森...

    财物无忧4.1

    软件简介: 办公管理软件,适用于企业费用报销管理、企业合同管理、企业项目管理维护、财务管理(非财务核算软件)。 软件适用范围: 1 费用报销频繁,还处在手工提交报销单、需要现场审批的企业 2 合同还处在...

    大数据时代,布局大屏幕可视化.docx

    同时,通过自动化软件技术,系统还可以侦测外在环境、分析厂内环境变化并配合人员作息,进行灯光、空调自动调整控制,除了发挥极大节能功效,也为厂内人员提供更舒适的办公环境。这套实时监控系统还连接到了全球各...

    盛行数字卡易购数字卡销售系统

    强大的库存分析系统,让您完全了解商品的库存状况. ☆ 强大的客户管理系统,让您有所有的权限管理客户的帐户开通、冻结、修改等. ☆ 整合云网在线支付平台. ☆ 整合阿里巴巴支付宝支付及时到帐接口. ☆ ...

    阿里巴巴面试题leetcode-cs_job:计算机科学相关求职的一些高级说明

    一些个人求职经历的简短摘要,包括软件开发工程师 (SDE)、机器学习工程师 (MLE)、研究/应用科学家 (RS/AS) 和数据分析师/科学家 (DA/DS) 等行业工作。 关键点 对于PhD,最优先的应该始终是发表第一作者的顶级会议...

    客户管理系统

    依托功能强大、安全稳定的阿里云平 台,性价比高、扩展性好、安全性高、稳定性好。高内聚低耦合的模块化设计,使得每个模块最大限度的满足需求,相关模块的组合能满足用户的一系列要求。简单 易用的云备份使得用户...

Global site tag (gtag.js) - Google Analytics