认证鉴权
AstroZero提供的所有接口都需要通过认证之后才可以访问。认证方式主要分以下两类:
- 在请求消息头上,设置“access-token”
- 在请求消息头上,设置“Authorization”
两类方式都是通过不同的认证接口,来获取到Token。Token在计算机系统中代表令牌(临时)的意思,拥有Token代表拥有某种权限。Token认证是在调用API的时候将Token加到请求消息头,从而通过身份认证,获得操作API的权限。
平台用户分以下几类,不同类别的用户访问接口的权限会有所不同:
- 平台用户 (User):一般对应运行环境、开发环境用户,用于管理开发应用。
- 业务用户(Portal User):业务用户是访问AstroZero提供的业务服务的用户。
- 匿名用户 (Guest):对于该类用户,平台接口都需要进行校验,未登录前使用Guest用户身份来访问平台接口,一般会赋予最小的权限。
获取Token的认证接口,如表1所示。
接口 |
说明 |
生成Token的用户 |
是否可以直接访问接口 |
---|---|---|---|
账号密码登录 |
通过账号密码直接访问登录接口,成功校验则返回“access-token”,写到Cookies上。 |
平台用户、业务用户 |
是 |
单点登录(“CAS”协议) |
支持CAS单点登录方式,通过CAS server登录后携带ticket重定向到AstroZero。 AstroZero后台拿ticket到CAS Server校验ticket合法性,得到ticket对应的账号(可选)、用户信息,然后校验该用户是否存在,在指定了账号的情况下,如果该用户不存在,则创建对应用户; 没有指定租户的情况下该用户不存在则直接报错,并返回到CAS Server。 成功验证用户身份后,则生成Session写到cookie上, 重定向到指定页面。 |
平台用户、业务用户 |
是 |
使用OAuth 2.0的客户端(即client_credentials)鉴权模式 |
根据鉴权ID和鉴权密钥,调用获取用户Token的接口,来获取access_token。匿名用户一般通过该方式来获取Token。 具体操作,请参见•通过“客户端模式”获取的access-toke...。 |
平台用户、匿名用户 |
是 |
使用OAuth 2.0的授权码(即authorization_code)鉴权模式 |
根据鉴权ID、鉴权密钥、授权码调用获取用户Token接口来获取access_token。后续需要通过access_token获取授权用户信息。 具体操作,请参见•通过“授权码模式”获取的access-toke...。 |
平台用户、匿名用户 |
是 |
供华为WeLink单点登录 |
AstroZero开发的轻应用或者We码支持WeLink登录,在WeLink打开轻应用或者We码可以实现免登访问。 |
业务用户 |
否 |
业务用户登录(服务编排中PORTALUSERLOGIN公式) |
指定业务用户名,使用服务编排的“PORTALUSERLOGIN”公式来登录。 |
业务用户 |
否(只能在服务编排中访问接口) |
业务用户通过RefreshToken获取新的Token |
可以通过配置内置系统参数“bingo.service.refreshtoken.enable”为“是”的方式来选择开启RefreshToken特性。开启后,业务用户通过服务编排的“PORTALUSERLOGIN”公式登录AstroZero时,会在Cookies中多返回一个“refresh-token”参数。可再通过发起请求“POST https://AstroZero域名/baas/auth/v1.0/refreshtoken”来获取一个新的Token(调该接口时需要在请求消息头上设置参数“Content-Type”值为“application/json”,请求消息体中设置参数“grant_type”值为“refresh_token”,“refresh_token”值为Cookies中返回的“refresh-token”参数值)。原有的Token不管有没有失效,都会被置成失效状态。一般情况下,“refresh-token”的有效期会比较长,在用户的权限配置中可通过配置“刷新凭证时长”来控制其有效期。 具体操作,请参见业务用户通过RefreshToken获取新的Token。 |
业务用户 |
是 |
JWT(JSON Web Tokens)鉴权方式 |
根据其他方式生成的“access-token”,可以通过jwt接口换成一个JWT形式的token。一般用于AstroZero内部服务之前的相互访问。 内部服务会在etcd上配置一个“SecretKey”,内部网元读取“SecretKey”来解JWT得到用户信息。 |
平台用户 |
是 |
供CAS Server使用的账号密码登录方式 |
AstroZero自身的CAS Server没有独立的持久化,使用的Authcenter模块的用户体系,由Authcenter提供一个接口来做用户鉴权。 sequenceDiagram participant CAS Server participant Authcenter CAS Server ->> Authcenter: 通过账号密码访问调用 Authcenter 认证接口 Authcenter -->> CAS Server: 返回认证结果,成功则包含用户账号信息 CAS Server ->> CAS Server: 生成 TCG CAS Server ->> Authcenter: 携带ticket 重定向到 Authcenter |
平台用户 |
否 |
OAuth鉴权
- 通过“客户端模式”获取的access-token,可用于调用API接口时进行鉴权,使用时在请求消息头上设置“access-token”。
- 参考如何登录经典版环境配置中操作,登录经典版环境配置。
- 在左侧导航栏中,选择“系统管理 > OAuth”菜单,新建OAuth管理。
图1 新建客户端模式OAuth管理
- 第三方通过OAuth认证接入系统后,将以选择的用户身份操作数据,所以需要确保选择的用户具有调用API的相关权限。
- 选择的用户的权限不能为匿名用户权限“Anonymous_User_Profile”,因为Guest用户没有访问API的权限,因此无法配置OAuth。
- 在OAuth管理列表中,单击该鉴权所在行的,下载密钥文件。
表2 密钥文件参数 参数
参数说明
username
当“授权类型”配置为“客户端模式”时,密钥文件会包含该参数,为创建OAuth时选择的用户名。
client_id
鉴权的客户端ID。
client_secret
鉴权密钥。
- 根据鉴权客户端ID和鉴权密钥,通过Post请求调用接口“https://AstroZero域名/baas/auth/v1.0/oauth2/token”,获取access_token。
表3 请求参数说明 参数名
类型
必选(M)/可选(O)
参数位置
参数含义
值
grant_type
String
M
Body
授权模式,OAuth2.0中的grant_type字段的取值。
client_credentials(即客户端模式)
client_id
String
M
Body
鉴权的客户端ID,可在OAuth查看。
从上一步骤获取。
client_secret
String
M
Body
鉴权密钥,可在OAuth查看。
说明:URL查询参数中,请勿配置client_secret,建议将其配置到请求体中。
从上一步骤获取。
redirect_url
String
O
Body
重定向URL。
http://www.example.com
locale
String
O
Body
语言。
en_US
表4 返回参数说明 参数
参数说明
access_token
认证后可信任的Token凭证。
expires_in
当前access_token的有效期,单位:秒。
token_type
access_token类型。
图2 接口调用结果
当接口调用出错时,会返回错误码“400”及错误信息说明,错误响应的Body体格式如下所示。
{ "error": "unauthorized_client", "error_description": "The client is not authorized to request a token using this method." }
其中,error表示错误提示,error_description表示错误描述信息。
- 将Headers中的access-token参数,设置为上一步得到的access_token,成功调用自定义的API接口。
图3 成功调通API接口
返回消息体中包含三种参数,“resCode”和“resMsg”参数代表此次请求的状态码及请求信息,您可以通过自定义错误码信息来设置请求错误时的返回信息,具体参考错误码。“result”参数为调用的接口返回的数据,与查看API信息时接口“返回消息”内容一致。
- 通过“授权码模式”获取的access-token,可用于获取用户信息时进行鉴权,使用时在请求消息头上设置“Authorization”。
- 进入AstroZero服务控制台。
- 在主页中,单击“进入首页”,进入AstroZero应用开发页面。
- 在页面左上方单击,选择 ,进入环境配置。
- 在左侧导航栏中,选择“集成连接 > OAuth”菜单,新建OAuth管理。
图4 新建授权码模式OAuth管理
重定向地址将作为第三方系统同意授权后的跳转页面,并在页面地址上携带授权码信息。
- 在OAuth管理列表中,单击该鉴权所在行的,下载密钥文件。
表5 密钥文件参数 参数
参数说明
redirect_uri
当“授权类型”配置为“授权码模式”时,密钥文件会包含该参数,为上一步设置的重定向地址。
client_id
鉴权的客户端ID。
client_secret
鉴权密钥。
- 根据鉴权ID和重定向地址,在浏览器上的访问接口“https://AstroZero域名/baas/auth/v1.0/oauth2/authorize”,获取授权码信息。
表6 请求参数说明 参数名
类型
必选(M)/可选(O)
参数位置
参数含义
值
response_type
String
M
Params
授权接口返回类型,即返回授权码
code
client_id
String
M
Params
客户端鉴权ID,可在OAuth查看。
从上一步骤获取。
redirect_url
String
M
Params
重定向地址。
从上一步骤获取。
图5 页面效果
- 单击“授权”按钮,跳转到重定向地址,并携带授权码信息。
图6 授权码信息
- 根据授权码code,根据鉴权ID、鉴权密钥通过Post请求调用接口“https://AstroZero域名/baas/auth/v1.0/oauth2/token”,获取access_token。
表7 请求参数说明 参数名
类型
必选(M)/可选(O)
参数位置
参数含义
值
grant_type
String
M
Body
授权模式,OAuth2.0中的grant_type字段的取值。
authorization_code(即授权码模式)
client_id
String
M
Body
客户端鉴权ID,可在OAuth查看。
从3中获取。
client_secret
String
M
Body
客户端鉴权密钥,可在OAuth查看。
从3中获取。
redirect_url
String
M
Body
重定向地址。
从3中获取。
code
String
M
Body
授权码。
从7中获取。
locale
String
O
Body
语言。
en_US
表8 返回参数说明 参数
参数说明
access_token
认证后可信任的Token凭证。
expires_in
当前access_token的有效期。
refresh_token
用于刷新access_token。
token_type
access_token类型。
图7 接口调用结果
使用授权码获取access-token后即失效,重新获取access-token需要重新生成授权码。
- 将得到的token_type与access_token进行拼接,以{token_type} {access_token}的形式设置为Headers中的Authorization参数,通过Get请求调用接口“https://AstroZero域名/u-route/baas/oauth/v1.0/userinfo”,获取用户信息。
图8 获取用户信息
业务用户通过RefreshToken获取新的Token
- 开启RefreshToken特性。
- 进入AstroZero服务控制台。
- 在主页中,单击“进入首页”,进入AstroZero应用开发页面。
- 在页面左上方单击,选择 ,进入环境配置。
- 在左侧导航栏中,选择“系统设置 > 系统参数”。
- 在“内置系统参数”页签,查找“bingo.service.refreshtoken.enable”,单击搜索结果中的该参数名,在参数详情页单击“值”后的编辑按钮,设置参数值为“是”,单击“保存”。
图9 查找参数
图10 修改值为是
- 业务用户(例如“test_cs”)通过服务编排的“PORTALUSERLOGIN”公式登录AstroZero。
- 在“我的应用”中,单击某个应用,进入应用开发平台。
- 将鼠标放在左侧某个文件夹,单击界面上出现的“+”,在弹出菜单中选择“服务编排”。
- 设置标签为“testPortalUserLogin”,单击“名称”的输入框,系统会自动填充。然后单击“添加”。
- 在服务编排编辑器页面右侧,选择,在全局上下文页面单击“公式”后的加号。
- 在公式页面设置“名称”为“portal”,“数据类型”设置为“文本”,表达式为“PORTALUSERLOGIN("test_cs")”,单击“保存”,创建公式变量“portal”,表达式中的“test_cs”为要登录系统的业务用户名。
图11 新建公式变量
- 在服务编排编辑器页面右侧,选择。
- 在全局上下文页面,单击“变量”后的加号,默认创建名为“variable0”的文本类型变量。
- 在服务编排编辑器页面右侧,选择,按照下图从全局上下文页面中拖拽参数到出参区域,设置服务编排的出参。
图12 设置服务编排的出参
- 在左侧拖拽“逻辑”下“赋值”图标至画布中,按照下图设置赋值图元。
图13 设置赋值图元
- 连接所有元素。
- 在页面上方,单击,保存服务编排。
- 保存成功后,单击,不用设置输入参数直接单击“运行”,运行服务编排。
输出如下,表示业务用户已登录AstroZero。
{ "interviewId": "002N000000jeTG4DKxSS", "outputs": { "variable0": "XXX" } }
其中,“variable0”取值为业务用户的access-token值。
- 在输出的页面,按“F12”或者“Ctrl + Shift + I”,可开启调试工具。
- 在Cookies中,获取“refresh-token”值。
- 使用Postman发送请求,获取新Token。
- 在本地PC上下载并安装Postman工具,该工具仅用于测试使用。
- 使用Postman进行POST请求,URL配置为“https://AstroZero域名/baas/auth/v1.0/refreshtoken”,在请求消息头上设置参数“Content-Type”值为“application/json”,请求消息体中设置参数“grant_type”值为“refresh_token”,“refresh_token”值为2.n获取的“refresh-token”参数值。输出的result值即为新的Token,原有的Token不管有没有失效,都会被置成失效状态。
图14 Postman发送请求
表9 请求消息头 消息头名称
描述
是否必选
Content-Type
HTTP协议中设定的一个参数,用于标识返回的内容用什么格式去解析,此处必须配置为“application/json”。表示浏览器将返回内容解析为json对象。
是
表10 消息体说明 参数名
描述
是否必选
grant_type
授权类型,配置为“refresh_token”。
是
refresh_token
配置为2.n获取的“refresh-token”参数值。
是