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:port 或http://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条
- szSN - [IN] 授权码(SN)字符串。如果为空(空串或NULL)则尝试寻找所有当前本机可用的SN。
类型 | 格式 | 说明 |
---|---|---|
授权码 | 比特授权云平台产生的SN 示例: JNLTGZSEFA****** |
检查指定SN的license |
BIT-ID(BIT-ID硬件,类似于加密的USB设备) | #xxxx 或bitid: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);
}