iusure 发表于 2018-3-24 22:49:42

admin 发表于 2013-6-21 12:02
若在AnyChat之外已经进行了一次用户身份验证,只是希望用AnyChat实现流媒体通信服务,而且不希望在业务服务 ...

请问这个逻辑在java里边怎么实现呢?

陈鑫 发表于 2018-3-26 11:32:03

实现思路简化版:
客户端登陆API,发送用户信息 --- 核心服务转发ID和密码 --- 业务服务器验证(验证方法自行设计),返回用户身份验证回调函数 --- 核心转发回调 --- 客户端通过验证后登陆。
用户身份验证回调函数说明:
2.3.用户身份验证回调函数定义
typedef DWORD (CALLBACK* BRAS_VerifyUser_CallBack)(IN LPCTSTR lpUserName,INLPCTSTR lpPassword, OUT LPDWORD lpUserID, OUT LPDWORD lpUserLevel, OUT
LPTSTR lpNickName,IN DWORD dwNCLen, LPVOID lpUserValue);
参数:
LPCTSTRlpUserName 用于身份验证的用户名
LPCTSTRlpPassword 用于身份验证的用户密码
LPDWORD lpUserID输出用户的 ID 号(唯一)
LPDWORD lpUserLevel 输出用户的级别
LPTSTR lpNickName 输出用户的昵称(可以与用户名相同)
DWORD dwNCLen保存用户昵称的缓冲区大小
LPVOIDlpUserValue 用户自定义参数,在设置回调函数时传入
返回值:
DWORD返回出错代码,参考 SDK\ GVErrorCodeDefine.h 文件中有关出错
代码的定义,通常会返回如下的值:
GV_ERR_SUCCESS(0)表示验证通过,允许用户登录系统
GV_ERR_CERTIFY_FAIL(200) 用户名或密码有误,认证失败
GV_ERR_ACCOUNT_LOCK(202)帐户已被暂时锁定,认证失败
备注:
该回调函数用于验证用户的身份信息。用户名与用户密码为输入参数,后面其它的参数为输出参数,用于反馈结果给服务器程序。身份验证是否成功通过该
方法的返回值来判定。dwVSLen 用于指示传入的缓冲区大小,防止函数体里面拷贝数据时内存溢出。如果该方法不输出用户的昵称,即当 lpNickName 的字符
长度为 0 时,服务器会自动将用户名默认为用户的昵称。
当客户端调用 API:“BRAC_Login”方法,且用户密码不为空时将会触发该回调函数,如果用户密码为空,则不会触发该回调,服务器会将该客户端当“游
客身份”进行处理,如果服务器不支持游客方式登录,则将会返回对应的出错代码给客户端。
该回调仅仅做为用户身份验证之用,不能在该回调里面调用其它的 API(如向指定用户传输透明通道数据:BRAS_TransBuf 等),因为该回调没有返回之前,
用户在内核就没有与 USERID 进行绑定,所以这时调用其它的 API 将是无效的,如 需 要 在 用 户 登 录 之 后 就 发 送 一 些 数 据 , 则 可 在
BRAS_OnUserLoginAction_CallBack 回调函数里面进行处理。

陈鑫 发表于 2018-3-26 11:42:15

最简单的验证方法是,业务服务器收到核心转发的用户信息后,去DB用户表里面检索,匹配成功后,返回回调函数和用户ID给核心,核心传给客户端,通过验证。
页: 1 [2]
查看完整版本: 有关AnyChat平台用户身份验证与第三方平台集成的问题