平台权限认证机制
权限认证机制介绍
权限认证是指当用户登录AppCube时,对用户拥有的权限进行认证的机制。
AppCube提供的所有接口都需要通过认证后,才可以访问。而AppCube中存在如下几类用户,不同类别的用户访问接口的权限会有所不同:
权限认证方式
AppCube中的认证方式使用的是:在请求消息头上设置“access-token”进行认证。
在请求头上设置“access-token”是通过不同的认证接口来获取到Token。Token在计算机系统中代表令牌(临时)的意思,拥有Token代表拥有某种权限。Token认证是在调用API时,将Token加到请求消息头,从而通过身份认证,获得操作API的权限。
如何通过Token进行认证
通过Token进行接口认证的方法说明,如表1所示。
认证类别 |
认证方式 |
说明 |
使用的用户 |
是否可以直接访问接口 |
---|---|---|---|---|
帐号密码认证类别 |
帐号密码登录 |
通过帐号密码直接访问登录接口,成功校验则返回“access-token”,写到Cookies上。 |
用户 |
是 |
单点登录认证类别 |
单点登录(“CAS”协议) |
支持CAS单点登录方式,通过CAS server登录后携带ticket重定向到AppCube。 AppCube后台拿ticket到CAS Server校验ticket合法性,得到ticket对应的租户(可选)、用户信息,然后校验该用户是否存在,在指定了租户的情况下,如果该用户不存在,则创建对应用户; 没有指定租户的情况下该用户不存在则直接报错,并返回到CAS Server。 成功验证用户身份后,则生成Session写到Cookies上, 重定向到指定页面。例如:通过红标华为WeLink单点登录AppCube,AppCube返回access-token给WeLink,供WeLink访问AppCube接口。 |
用户、业务用户 |
是 |
OAuth 2.0认证登录类别 |
使用OAuth 2.0的client credentials鉴权模式 |
根据鉴权ID和鉴权密钥调用获取用户Token接口,来获取access_token。匿名用户一般通过该方式来获取Token。 |
用户 |
是 |
匿名登录认证类别 |
使用OAuth 2.0的client credentials鉴权模式 |
匿名用户一般根据鉴权ID和鉴权密钥调用获取用户Token接口,来获取access_token。 |
匿名用户 |
是 |
业务用户登录使用服务编排中公式登录 |
业务用户登录(服务编排中PORTALUSERLOGIN公式) |
指定业务用户名,使用服务编排的“PORTALUSERLOGIN”公式来登录。 |
业务用户 |
否(只能在服务编排中访问) |
RefreshToken特性
通过配置内置系统参数“bingo.service.refreshtoken.enable”为“是”的方式,来选择开启RefreshToken特性。开启后,业务用户通过服务编排的“PORTALUSERLOGIN”公式登录AppCube时,会在Cookies中多返回一个“refresh-token”参数。可再通过发起请求“POST https://AppCube域名/baas/auth/v1.0/refreshtoken”来获取一个新的Token(调该接口时需要在请求消息头上设置参数“Content-Type”值为“application/json”,请求消息体中设置参数“grant_type”值为“refresh_token”,“refresh_token”值为Cookies中返回的“refresh-token”参数值)。原有的Token不管有没有失效,都会被置成失效状态。一般情况下,“refresh-token”的有效期会比较长,在用户的权限配置中可通过配置“刷新凭证时长”来控制其有效期。
- 开启RefreshToken特性。
- 登录AppCube管理中心。
- 在左侧导航栏中,选择“系统管理 > 系统参数”。
- 在“内置系统参数”页签,查找“bingo.service.refreshtoken.enable”,单击搜索结果中该参数名称。
- 在参数详情页,单击“值”后的
,设置参数值为“是”,单击“保存”。
图1 查找参数
- 业务用户(例如“test_cs”)通过服务编排的“PORTALUSERLOGIN”公式登录AppCube。
- 在“我的应用”中,单击某个应用,进入应用开发页面。
- 将鼠标放在左侧某个文件夹上,单击界面上出现的“+”,在弹出菜单中选择“服务编排”。
- 设置标签为“testPortalUserLogin”,单击“名称”的输入框,系统会自动填充,单击“添加”。
- 单击
,在全局上下文页面,单击“公式”后的加号。
- 在公式页面设置“名称”为“portal”,“数据类型”设置为“文本”,表达式为“PORTALUSERLOGIN("test_cs")”,单击“保存”,创建公式变量“portal”,表达式中的“test_cs”为要登录系统的业务用户名。
- 单击
,在全局上下文页面,单击“变量”后的加号,默认创建名为“variable0”的文本类型变量。
- 单击
,按照下图从全局上下文页面中拖拽参数到出参区域,设置服务编排的出参。
- 在左侧拖拽“逻辑”下“赋值”图标至画布中,按照下图设置赋值图元。
- 连接所有元素。
- 单击
,保存服务编排。
- 单击
,不用输入入参直接单击“运行”,运行服务编排。
输出如下信息,表明业务用户已登录AppCube。
{ "interviewId": "002N000000jeTG4DKxSS", "outputs": { "variable0": "XXX" } }
其中,“variable0”的值即为业务用户的access-token值。
- 在输出的页面,按“F12”或者“Ctrl + Shift + I”,可开启调试工具,在Cookies中获取“refresh-token”值。
- 使用Postman发送请求,获取新Token。
- 在本地PC上,下载并安装Postman工具,该工具仅用于测试使用。
- 使用Postman进行POST请求,URL配置为“https://AppCube域名/baas/auth/v1.0/refreshtoken”,在请求消息头上设置参数“Content-Type”值为“application/json”,请求消息体中设置参数“grant_type”值为“refresh_token”,“refresh_token”值为2.l获取的“refresh-token”参数值。输出的result值即为新的Token。原有的Token不管有没有失效,都会被置成失效状态。图2 Postman发送请求
表2 请求消息头 消息头名称
描述
是否必选
Content-Type
HTTP协议中设定的一个参数,用于标识返回的内容用什么格式去解析,此处必须配置为“application/json”,表示浏览器将返回内容解析为json对象。
是
表3 消息体说明 参数名
描述
是否必选
grant_type
授权类型,配置为“refresh_token”。
是
refresh_token
配置为2.l中获取的“refresh-token”参数值。
是
