Bit_Login / Bit_LoginEx

BIT_STATUS BIT_CALLCONV Bit_Login(
    BIT_PCSTR      szURL,
    BIT_PCSTR      szSN,
    BIT_UCHAR      *pApplicationData,
    BIT_HANDLE     *pHandle,
    LOGIN_MODE     mode);

BIT_STATUS BIT_CALLCONV Bit_LoginEx(
    BIT_PCSTR      szURL,
    BIT_PCSTR      szSN,
    BIT_UINT32     featureId,
    BIT_PCSTR      szReserved,
    BIT_UCHAR      *pApplicationData,
    BIT_HANDLE     *pHandle,
    LOGIN_MODE     mode);

授权登录。初始化运行环境,获取操作句柄。必须在除升级函数之外的其它操作前执行。根据登录模式的不同可能需要连接授权服务器。

Bit_Login等价于Bit_LoginEx(…, featured=0,szReserved=NULL, …),当需要登录包含指定特征项的授权时才需要调用Bit_LoginEx。

参数

  • szURL - [IN] 自定义授权服务地址,包括端口,如未使用自定义授权服务器则为NULL。授权服务地址可以是网络地址、本地授权目录以及license串。
类型 格式 说明
授权服务器地址 bit://ip:porthttp://ip:port bit://”开头表示集团授权服务地址
http://”开头表示授权服务中心地址,一般是E3系统或者比特授权云的地址
授权文件路径 root://xxx 传入授权文件所在路径,Login就只会在该路径下查找授权,该设置等同于调用Bit_SetRootPath接口
License文件 lic://xxx 传入文件路径:读取文件内容,并加载到内存里使用
传入目录:自动加载该目录下的*.lic的授权文件
传入license串:将该license串加载到内存里使用

允许设置多个授权路径,通过“,”拆分。

如下:

lic:///tmp,lic:///data,bit://127.0.0.1:8273
/tmp,/data,127.0.0.1:8273  // 等价第1条

注意:该接口支持通过配置文件环境变量来设置该值,如果同时设置优先级为:环境变量 > API传入 > 配置文件。

  • szSN - [IN] 授权码(SN)字符串。如果为空(空串或NULL)则尝试寻找所有当前本机可用的SN。
类型 格式 说明
授权码 比特授权云平台产生的SN
示例:JNLTGZSEFA******
检查指定SN的license
BIT-ID(BIT-ID硬件,类似于加密的USB设备) #xxxxbitid:xxxx
以“#”或“bitid:”开头,表示使用激活BIT-ID,后面紧跟BIT-ID序号,从0开始依次递增
示例:#0,#1,bitid:0, bitid:1
使用BIT-ID授权
激活口令(帐号授权密码或SN激活口令) <xxx>
通过“<>”包裹起来,中间部分为密码
示例:<1234>, <1233>65447>
激活口令,是指授权码激活时,需要输入的一种口令,激活后不再需要,目前仅支持浮动授权
使用帐号授权时保存的是帐号授权的密码(已经不推荐),其它授权代表激活口令
既输入SN又输入激活口令 xxx<password>,授权码后边紧跟“<>”
示例:JNLTGZSEFA******<123>
  • featureId - [IN] 登录授权所需要包含的特征项ID。
  • szReserved - [IN] 一个xml串,可以传入特征项版本,如果不需要可以为NULL。

  xml格式如下:

<scope>
    <featureVersion>{特征项版本}</featureVersion>
</scope>
  • pApplicationData - [IN] 产品识别码,在Bitanswer SDK头文件里。
  • pHandle - [OUT] 通过Login函数返回的上下文句柄。
  • mode - [IN] 登录模式,按位操作。
说明
BIT_MODE_LOCAL(0x01) 只检查本地授权(单机授权、BIT-ID授权、内存授权)
BIT_MODE_REMOTE(0x02) 只检查远端授权(云授权、帐号授权、集团授权)
BIT_MODE_AUTO(0x03) 既检查本地授权,也检查远端授权(配置了远端IP的条件下)
优先级:本地授权 > 远端授权
BIT_MODE_CACHE(0x4) 云授权缓存
由于云授权SN比较难记,但登录时又必须传输,则可以使用该选项将SN串缓存起来,下次使用Login登录时可以不输入SN
BIT_MODE_USB(0x8) USB授权
LOGIN_MODE_PROCESS(0x10) 按进程模式登录
集团授权:普通模式一台机器占用一个用户数,进程模式是一个进程占用一个用户数
其它授权:不生效
LOGIN_MODE_SESSION(0x40) Session模式登录
集团授权:该模式比LOGIN_MODE_PROCESS控制的更细,一次会话占用一个点
其它授权:不生效
LOGIN_MODE_HIGH_PR(0x20) 高优先级登录
云授权:用户可以通过高优先级登录来挤掉普通登录。如果登录模式都是高优先级或者普通优先级则不生效
其它授权:不生效
LOGIN_MODE_NO_NETWORK(0x200) 禁用网络
禁止库联网时使用
LOGIN_MODE_CHECK_USERNAME(0x800) 检查当前设备的用户名
集团授权:默认情况下:一台的设备用户名不一样,会被识别为同一个机器,加了该模式,会识别为不同的设备。即:原来一台设备占用一个点,加了这个选项,“一台设备 + 用户名”占用一个点
其它授权:不生效
LOGIN_MODE_USE_SESSIONID(0x1000) Logout时不释放点数,并由第三方程序维护心跳
LOGIN_MODE_HIGH_PERFORMANCE(0x2000) 使用高性能模式登录
集团授权:将Login的两次请求转化为一次请求,可以减少服务负载
其它授权:不支持
LOGIN_MODE_PERSISTENT_CONN(0x4000) 使用长连接模式登录,只有集团授权支持,其它授权不支持 通过长连接可以减少TCP的频繁创建带来的性能损耗,但是会增加服务的socket连接数
LOGIN_MODE_CREATE_HANDLE_ONLY(0x10000) 仅创建handle,不检查license
集团授权:Login默认情况下会连接集团服务并占用一个用户数,加了该模式之后,在调用Query相关接口时才会连接服务器
其它授权:Login默认情况下会检查授权的可用性,加了该模式之后,在Query时才会检查
LOGIN_MODE_CREATE_NEW_HANDLE(0x20000) 创建新handle,每次创建的handle唯一
Login的请求默认都发pid
可以针对每一个handle进行设置属性,不会相互影响
LOGIN_MODE_MID(0x40000) 按设备占点(当没有设置LOGIN_MODE_ACCOUNT和LOGIN_MODE_GROUP时,默认按设备扣点)
LOGIN_MODE_ACCOUNT(0x80000) 按帐号占点
LOGIN_MODE_GROUP(0x100000) 按分组名占点

示例

// 使用高性能模式检查集团授权
BIT_HANDLE handle = NULL;
BIT_STATUS status = Bit_Login(
    NULL, NULL, application_data,
    &handle, LOGIN_MODE(BIT_MODE_REMOTE | LOGIN_MODE_HIGH_PERFORMANCE ));
if (status == BIT_SUCCESS) {
    // 校验成功
}

// 使用Session + 长连接模式检查集团授权
BIT_HANDLE handle = NULL;
BIT_STATUS status = Bit_Login(
    NULL, NULL, application_data,
    &handle, LOGIN_MODE(BIT_MODE_REMOTE | LOGIN_MODE_SESSION  | LOGIN_MODE_PERSISTENT_CONN ));
if (status == BIT_SUCCESS) {
    // 校验成功
}

// 使用内存license
BIT_HANDLE handle = NULL;
BIT_CHAR *pLicense = “lic://xxxxxxx”;
BIT_STATUS status = Bit_Login(pLicense, NULL, application_data, &handle, BIT_MODE_AUTO);
if (status == BIT_SUCCESS) {
    // 校验成功
}

// 先检查单机授权吗,如果没有再检查集团授权或云授权
BIT_HANDLE handle = NULL;
BIT_STATUS status = Bit_Login(NULL, NULL, application_data, &handle, BIT_MODE_AUTO);
if (status == BIT_SUCCESS) {
    // 校验成功
}

// 检查包含指定特征项的授权
BIT_HANDLE handle = NULL;
BIT_UINT32 featureId = 1;
BIT_STATUS status = Bit_LoginEx(NULL, NULL,  featureId, NULL, application_data, &handle, BIT_MODE_AUTO);
if (status == BIT_SUCCESS) {
    // 校验成功
}

Bit_LoginByToken / Bit_LoginByTokenEx

BIT_STATUS BIT_CALLCONV Bit_LoginByToken(
    BIT_PCSTR      pUrl,
    BIT_PCSTR      pToken,
    BIT_UCHAR      *pApplicationData,
    BIT_HANDLE     *pHandle)

BIT_STATUS BIT_CALLCONV Bit_LoginByTokenEx(
    BIT_PCSTR      pUrl,
    BIT_PCSTR      pBusinessGuid,
    BIT_PCSTR      pToken,
    BIT_PCSTR      pIdpGuid,
    BIT_PCSTR      pGrantType,
    BIT_UCHAR      *pApplicationData,
    BIT_HANDLE     *pHandle)

帐号授权的登录接口。

仅支持两种认证方式:第一种是使用OIDC协议产生的id_token认证,第二种是使用比特授权云平台自己产生的access_token进行认证。

参数

  • pUrl - [IN] 服务器地址,可以为空。
  • pBussinessGuid - [IN] 业务guid,在比特授权云平台获取。
  • pToken - [IN] 第三方身份源颁发的token或id_token,通过前缀区分。
说明
token:xxx或xxx 使用access_token登录
id_token:xxx 使用id_token登录
  • pIdpGuid - [IN] 第三方身份源guid,在比特授权云平台获取。参数为空表示使用比特授权云平台产生的token进行登录,即Bit_LoginByToken。
  • pGrantType - [IN] 授权类型。固定值为“bitanswer:idp:oidc:id_token”。
  • pApplicationData - [IN] 产品识别码,记录在接口定义文件中,与产品一一对应。
  • pHandle - [OUT] 通过Login函数返回的上下文句柄。

Bit_LoginByPassword

BIT_STATUS BIT_CALLCONV Bit_LoginByPassword(
    BIT_PCSTR       szURL,
    BIT_PCSTR       szBusinessGuid,
    BIT_PCSTR       szBusinessSecret,
    BIT_PCSTR       szAccount,
    BIT_PCSTR       szPassword,
    BIT_UCHAR       *pApplicationData,
    BIT_HANDLE      *pHandle);

通过用户名和密码登录账号授权。

参数

  • szURL - [IN] 服务器地址,可以为空。
  • pBussinessGuid - [IN] 业务编号,在比特授权云平台获取。
  • szBusinessSecret [IN] 业务密钥,在比特授权云平台获取。
  • szAccount - [IN] 用户账号。
  • szPassword - [IN] 用户密码。
  • pApplicationData - [IN] 产品识别码,记录在接口定义文件中,与产品一一对应。
  • pHandle - [OUT] 通过Login函数返回的上下文句柄。

Bit_Logout

BIT_STATUS Bit_Logout (
    BIT_HANDLE handle)

此函数用于释放上下文句柄,退出登录状态,与Login相关接口一一对应。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。

Bit_Revoke

BIT_STATUS Bit_Revoke (
    BIT_PCSTR     szURL,
    BIT_PCSTR     szSN,
    BIT_UCHAR     *pApplicationData,
    BIT_CHAR      *pRevocationInfo,
    BIT_UINT32    *pRevocationInfoSize)

从客户端迁出已激活的浮动授权码。授权码迁出后,可以用于其它的客户端。根据输入参数的不同,本函数可用于在线或离线迁出。

参数

  • szURL - [IN] 自定义授权服务器地址,包括端口。如未使用自定义授权服务器则为NULL。
  • szSN - [IN] 授权码(SN)字符串。
  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。
  • pRevocationInfo - [OUT] 迁出请求码的存储区地址。为NULL表示进行在线迁出,否则API将执行手工离线迁出,请求码应发给服务器进行确认。
  • pRevocationInfoSize - [IN/OUT] 输入时为请求码存储区大小,输出时为请求码长度。如此参数为NULL,函数将选择在线迁出。

Bit_RemoveSn

BIT_STATUS Bit_RemoveSn (
    BIT_PCSTR     szSN,
    BIT_UCHAR     *pApplicationData)

删除指定授权码在本机的授权数据。

参数

  • szSN - [IN] 授权码(SN)字符串。
  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。

Bit_Heartbeat

BIT_STATUS BIT_CALLCONV Bit_Heartbeat(
    BIT_HANDLE     handle,
    BIT_UINT32     *pReconnectsNum)

手动心跳。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • pReconnectsNum - [OUT] 保存心跳失败次数,开发上可以根据该次数决定是否退出程序。

Bit_SessionControl

BIT_STATUS BIT_CALLCONV Bit_SessionControl(
    BIT_PCSTR     szURL,
    BIT_PCSTR     pSessionId,
    BIT_UINT32    type,
    BIT_UCHAR     *pApplicationData,
    BIT_CHAR      *pValue,
    BIT_UINT32    *pValueLen)

控制或设置session的信息。具体使用场景可参考《浏览器并发控制》文档。

参数

  • szURL - [IN] 自定义授权服务器地址,包括端口。如未使用自定义授权服务器则为NULL。
  • pSessionId - [IN] Login后的sessionId,通过Bit_GetSessionInfo可以获取。
  • type - [IN] 类型。
类型 说明
SESSION_CTL_LOGOUT(0x1) 释放session
SESSION_CTL_CHECK(0x2) 触发心跳并获取sessionId状态
  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。
  • pValue - [OUT] 数据缓存区。
  • pValueLen - [IN/OUT] 输入时是数据缓存区的大小,输出时是实际数据长度。

Bit_SetSessionState

BIT_STATUS Bit_SetSessionState (
    BIT_HANDLE     handle,
    BIT_UINT32     state,
    BIT_VOID       *pReserved)

设置客户端的状态为空闲状态或繁忙状态或激活状态。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • state - [IN] 设置客户端的状态选项。
说明
SESSION_STATE_UNSET 默认值,表示不设置客户端的状态,服务端根据心跳状态来维护session,心跳断开则释放session
SESSION_STATE_IDLE 表示设置客户端为空闲态,服务端会在空闲时间超过设10分钟后自动释放session
SESSION_STATE_BUSY 表示设置客户端为繁忙状态,服务端不会自动释放,直到心跳断开或者客户端主动释放
SESSION_STATE_ACTIVE 表示设置客户端为活跃状态,重新计算空闲时间
  • pReserved - [OUT] 目前保留必须传NULL。

示例

BIT_STATUS status = BIT_SUCCESS;
BIT_UINT32 reserved = 0;

if (用户正在操作) {
    status = Bit_SetSessionState (handle,  SESSION_STATE_ACTIVE,  &reserved);
} else if (用户空闲) {
    status = Bit_SetSessionState (handle,  SESSION_STATE_IDLE,  &reserved);
}