更新时间:2024-07-18 GMT+08:00
分享

认证鉴权

AstroZero提供的所有接口都需要通过认证之后才可以访问。认证方式主要分以下两类:

  • 在请求消息头上,设置“access-token”
  • 在请求消息头上,设置“Authorization”

两类方式都是通过不同的认证接口,来获取到Token。Token在计算机系统中代表令牌(临时)的意思,拥有Token代表拥有某种权限。Token认证是在调用API的时候将Token加到请求消息头,从而通过身份认证,获得操作API的权限。

平台用户分以下几类,不同类别的用户访问接口的权限会有所不同:

  • 平台用户 (User):一般对应运行环境、开发环境用户,用于管理开发应用。

    使用的认证机制为:“账号密码登录认证”、“单点登录认证”和“OAuth 2.0鉴权登录认证”。

  • 业务用户(Portal User):业务用户是访问AstroZero提供的业务服务的用户。

    使用的认证机制为:“账号密码登录认证”、“单点登录认证”和“OAuth 2.0鉴权登录认证”。

  • 匿名用户 (Guest):对于该类用户,平台接口都需要进行校验,未登录前使用Guest用户身份来访问平台接口,一般会赋予最小的权限。

    使用的认证机制为:“OAuth 2.0鉴权登录认证”。

获取Token的认证接口,如表1所示。

表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鉴权

AstroZero平台提供了两种授权模式进行OAuth鉴权,分别是“客户端模式”和“授权码模式”,两种授权模式适用的鉴权范围有所不同。
  • 通过“客户端模式”获取的access-token,可用于调用API接口时进行鉴权,使用时在请求消息头上设置“access-token”。
    1. 参考如何登录经典版环境配置中操作,登录经典版环境配置。
    2. 在左侧导航栏中,选择“系统管理 > OAuth”菜单,新建OAuth管理。
      图1 新建客户端模式OAuth管理
      • 第三方通过OAuth认证接入系统后,将以选择的用户身份操作数据,所以需要确保选择的用户具有调用API的相关权限。
      • 选择的用户的权限不能为匿名用户权限“Anonymous_User_Profile”,因为Guest用户没有访问API的权限,因此无法配置OAuth。
    3. 在OAuth管理列表中,单击该鉴权所在行的,下载密钥文件。
      表2 密钥文件参数

      参数

      参数说明

      username

      当“授权类型”配置为“客户端模式”时,密钥文件会包含该参数,为创建OAuth时选择的用户名。

      client_id

      鉴权的客户端ID。

      client_secret

      鉴权密钥。

    4. 根据鉴权客户端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表示错误描述信息。

    5. 将Headers中的access-token参数,设置为上一步得到的access_token,成功调用自定义的API接口。
      图3 成功调通API接口

      返回消息体中包含三种参数,“resCode”和“resMsg”参数代表此次请求的状态码及请求信息,您可以通过自定义错误码信息来设置请求错误时的返回信息,具体参考错误码。“result”参数为调用的接口返回的数据,与查看API信息时接口“返回消息”内容一致。

  • 通过“授权码模式”获取的access-token,可用于获取用户信息时进行鉴权,使用时在请求消息头上设置“Authorization”。
    1. 进入AstroZero服务控制台
    2. 在主页中,单击“进入首页”,进入AstroZero应用开发页面。
    3. 在页面左上方单击,选择环境管理 > 环境配置,进入环境配置。
    4. 在左侧导航栏中,选择“集成连接 > OAuth”菜单,新建OAuth管理。
      图4 新建授权码模式OAuth管理

      重定向地址将作为第三方系统同意授权后的跳转页面,并在页面地址上携带授权码信息。

    5. 在OAuth管理列表中,单击该鉴权所在行的,下载密钥文件。
      表5 密钥文件参数

      参数

      参数说明

      redirect_uri

      当“授权类型”配置为“授权码模式”时,密钥文件会包含该参数,为上一步设置的重定向地址。

      client_id

      鉴权的客户端ID。

      client_secret

      鉴权密钥。

    6. 根据鉴权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 页面效果
    7. 单击“授权”按钮,跳转到重定向地址,并携带授权码信息。
      图6 授权码信息
    8. 根据授权码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需要重新生成授权码。

    9. 将得到的token_type与access_token进行拼接,以{token_type} {access_token}的形式设置为Headers中的Authorization参数,通过Get请求调用接口“https://AstroZero域名/u-route/baas/oauth/v1.0/userinfo”,获取用户信息。
      图8 获取用户信息

业务用户通过RefreshToken获取新的Token

  1. 开启RefreshToken特性。

    1. 进入AstroZero服务控制台
    2. 在主页中,单击“进入首页”,进入AstroZero应用开发页面。
    3. 在页面左上方单击,选择环境管理 > 环境配置,进入环境配置。
    4. 在左侧导航栏中,选择“系统设置 > 系统参数”。
    5. 在“内置系统参数”页签,查找“bingo.service.refreshtoken.enable”,单击搜索结果中的该参数名,在参数详情页单击“值”后的编辑按钮,设置参数值为“是”,单击“保存”。
      图9 查找参数
      图10 修改值为是

  2. 业务用户(例如“test_cs”)通过服务编排的“PORTALUSERLOGIN”公式登录AstroZero。

    1. 在“我的应用”中,单击某个应用,进入应用开发平台。
    2. 将鼠标放在左侧某个文件夹,单击界面上出现的“+”,在弹出菜单中选择“服务编排”。
    3. 设置标签为“testPortalUserLogin”,单击“名称”的输入框,系统会自动填充。然后单击“添加”。
    4. 在服务编排编辑器页面右侧,选择,在全局上下文页面单击“公式”后的加号。
    5. 在公式页面设置“名称”为“portal”,“数据类型”设置为“文本”,表达式为“PORTALUSERLOGIN("test_cs")”,单击“保存”,创建公式变量“portal”,表达式中的“test_cs”为要登录系统的业务用户名。
      图11 新建公式变量
    6. 在服务编排编辑器页面右侧,选择
    7. 在全局上下文页面,单击“变量”后的加号,默认创建名为“variable0”的文本类型变量。
    8. 在服务编排编辑器页面右侧,选择,按照下图从全局上下文页面中拖拽参数到出参区域,设置服务编排的出参。
      图12 设置服务编排的出参
    9. 在左侧拖拽“逻辑”下“赋值”图标至画布中,按照下图设置赋值图元。
      图13 设置赋值图元
    10. 连接所有元素。

    11. 在页面上方,单击,保存服务编排。
    12. 保存成功后,单击,不用设置输入参数直接单击“运行”,运行服务编排。

      输出如下,表示业务用户已登录AstroZero。

      {
        "interviewId": "002N000000jeTG4DKxSS",
        "outputs": {
          "variable0": "XXX"
        }
      }

      其中,“variable0”取值为业务用户的access-token值。

    13. 在输出的页面,按“F12”或者“Ctrl + Shift + I”,可开启调试工具。
    14. 在Cookies中,获取“refresh-token”值。

  3. 使用Postman发送请求,获取新Token。

    1. 在本地PC上下载并安装Postman工具,该工具仅用于测试使用。
    2. 使用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”参数值。

相关文档