1. 首页>
  2. 腾讯云代理

[经验分享] 音视频云通讯账号登录集成

腾讯云 2017年05月06日 浏览1178

腾讯云代理 腾讯云直播申请 游戏上云

摘要:

1.帐号集成简介

  腾讯登录服务(Tencent Login Service,TLS)是腾讯为开发者快速接入音视频云通讯服务而提供的一套通用帐号登录组件。实现包括QQ、微信、新浪微博、人人在内的多种帐号类型登录使用音视频通讯和即时通讯。开发者可以通过简单的SDK集成,便捷的接口调用,即可实现原本复杂的登录验证服务,使代码量急剧减少。
  腾讯登录服务为你带来:
         快速搭建安全的APP自有帐号体系,实现注册、登录、验证能力
         快速实现使用已有APP自有帐号访问即时通讯云相关服务
         快速实现多种第三方帐号访问即时通讯云相关服务


2.帐号集成原理

  TLS可以帮你快速使用APP自有帐号体系登录使用即时通讯云服务,并且实现QQ帐号、微信帐号、新浪微博等多种帐号登录,快速提升APP能力。
  账号集成过程中,用户身份验证由开发者负责(APP自有帐号、第三方帐号),开发者和腾讯之间通过签名验证建立信任关系。开发者在申请接入时,需要按照要求生成公私钥,然后将公钥提交腾讯服务器,并且用私钥加密指定数据生成签名交由腾讯TLS服务器验证合法性。

2.1.APP自有帐号集成


【说明】
帐号注册在APP自有注册Server完成,帐号密码无需同步到腾讯。

登录流程一共2个步骤
1)用户在客户端输入帐号密码后到APP自有帐号登录Server验证,验证成功后自有帐号登录Server使用私钥派发签名给客户端
2)客户端使用音视频云通讯相关服务时,需要提交帐号类型(AccountType)、用户ID(Identifier)和私钥签名(UserSig),由音视频云通讯向腾讯登录服务Server发起签名验证,验证成功后即可使用相关服务

【使用说明】
1)开发者需要保证私钥安全,腾讯完全信赖私钥签名
2)签名有效期由开发者指定,并加密在私钥签名中
3)该集成方式无需将APP自有帐号的帐号密码同步腾讯,最大程度保证开发者用户数据的私密性

2.2.第三方帐号集成


【说明】
登录流程一共3个步骤
1)用户在客户端输入帐号密码后,到第三方帐号登录Server验证
2)成功后向开发者验证Server提交OpenId和Token进行验证,验证成功后使用私钥派发签名给客户端
3)客户端使用音视频云通讯相关服务时,需要提交第三方帐号类型(AccountType)、第三方帐号AppId(AppIdAt3rd)、第三方OpenId(Identifier)和私钥签名(UserSig),由音视频云通讯向腾讯登录服务Server发起签名验证,验证成功后即可使用相关服务。

【使用说明】
1)开发者需要保证用户数据安全以及私钥安全,腾讯完全信赖私钥签名
2)签名有效期由开发者指定,并加密在私钥签名中
3)该集成方式无需将接入第三方帐号的相关配置同步腾讯,最大程度保证开发者数据的私密性


3.帐号集成流程


3.1.账号信息提交

按账号集成流程注册腾讯云,开通服务并创建应用点击下一步进入账号集成信息提交页面

3.1.1.APP自有帐号集成


账号名称:您的APP自有账号的名称,例如:QQ;
账号集成模式:暂时仅支持独立模式;
公钥:请参见公私钥生成章节
添加账号管理员:目前仅支持最多三个管理员;

3.1.2.第三方帐号集成


账号类型:您的APP需要支持的账号类型,例如:QQ开放账号;
账号集成模式:暂时仅支持独立模式;
公钥:请参见公私钥生成章节

3.1.3.公/私钥生成

对文件tls_sig_api.tar.gz 解压, cd 到lib目录下 

如何生成私钥
生成一对ec公私钥对,其中ec_key.pem带有私钥,私钥需要高度保密。
./openssl ecparam -out ec_key.pem -name secp256k1 -genkey

如何生成公钥
生成对应的公钥,申请接入腾讯音视频云通讯服务时提交给腾讯
./openssl ec -in ec_key.pem -pubout -out public.pem


3.2.账号集成开发
3.2.1.前言

  主要介绍签名格式,如何生成签名,如何验证签名,以及API的使用等。

3.2.2.签名格式

•TLS.account_type
   值:整形字符串,标识帐号类型
   说明:自有帐号:接入腾讯IM云时分配的AccoutType
   第三方帐号:见附录

•TLS.appid_at_3rd
   值:字符串,第三方帐号平台分配的appid

•TLS.identifier
   值:字符串,用户ID
   说明:自有帐号:用户ID;第三方帐号:第三方帐号平台返回的OpenID

•TLS.sdk_appid
   值:整形字符串,接入腾讯IM云时分配的sdkAppid

•TLS.expire_after
   值: 整形字符串,签名失效时间,单位秒

•TLS.time
   值: 字符串,签名签发的时间
   说明:调用API生成时自动添加。格式必须按照[RFC3339]标准填写。
   例子: 2005-05-15T17:11:51ZUNIQUE

•TLS.signed
   值: 字符串,需要签名的字段
   说明: 调用API生成时自动添加。字段名不包括"TLS"。每个字段用”,”分隔。
   自有帐号必须包括: "account_type", "identity " , "sdk_appid",”time”和”expire_after”
   第三方帐号必须包括:"account_type ", "appid_at_3rd ", "identity", "sdk_appid",”time”和”expire_after”
   例如:"account_type,identity ,sdk_appid,time,expire_after".

•TLS.sig
   值: Base 64编码的私钥签名
   说明:调用API生成时自动添加

3.2.3.工具生成/验证签名

对文件tls_sig_api.tar.gz 解压, cd 到lib目录下 
执行./tls_licence_tools
输出:

Usage:
获取签名:[./tls_licence_tools 1 Json文件 私钥文件 带签名Json文件]
验证签名:[./tls_licence_tools 2 带签名Json文件 公钥文件 strAccountType(账号类型),strAppid3Rd(第三方账号类型,没有添空),strAppid(sdkappid),strIdentify(id).

在../example/目录下有json格式的参考事例

如何生成签名
执行:./tls_licence_tools 1 ../example/json ../example/ec_key.pem sig

sig为生成的签名
正常会输入签名ok

如何验证生成的签名
执行:./tls_licence_tools 2 sig ../example/public.pem 107 "" 150000000 xxx_openid
正常会输出签名ok
否则会输出出错原因.

3.2.4.签名API

当前支持语言

目前仅支持linux平台下C++,Java (JNI)。

C++ API

  TLS提供签名使用的C++ API 在文件tls_sig_api.tar.gz 中 lib/目录下。C++ API的demo见main.cpp

生成签名API

/*

*API: tls_gen_signature得到带有签名字段的json格式字符串*返回:0表示成功,非0表示失败*strJson: IN 参数,表示字符串json格式数据strJson事例://(文件见example目录)*strJsonWithSig OUT 参数:表示返回的签名字段的Json字符串*pPriKey:IN 参数 指向私有key的指针*uPriKeyLen:IN参数 私有Key的长度私有Key事例(见example目录):strErrMsg:OUT参数,如果出错,返回错误信息

************************************************************************/
int tls_gen_signature(const string& strJson,string& strJsonWithSig,char* pPriKey,uint32_t uPriKeyLen,string& strErrMsg);



验证签名API

/*

*API: tls_check_signature 签名字符串的确性检查*返回:0表示成功,非0表示失败
*strJsonWithSig: IN 参数,表示字符串带签名字段的json格式数据strJsonWithSig事例(文件见example目录)*pPubKey:IN 参数 指向公有Key的指针*uPubKeyLen:IN参数 公有Key的长度(文件见example目录)
strErrMsg:OUT参数,如果出错,返回错误信息

*/
int tls_check_signature(const string& strJsonWithSig, char* pPubKey,uint32_t uPubKeyLen,string& strErrMsg);

/*与tls_check_signature 作用相同,调用方多传入包体里的各字段和票据里对应字段检查
typedef struct {//账号信息需要传入

       string strAccountType; //"TLS.account_type": "107",       string strAppid3Rd; // "www.qq.com"       string strExpiry; //"TLS.expiry_after": "86400"       string strAppid; "TLS.sdk_appid": "150000000",       string strIdentify; "TLS.identity": "xxx_openid"

} SigInfo;
*/
int tls_check_signature_ex(const string& strJsonWithSig, char* pPubKey,uint32_t uPubKeyLen,const SigInfo& stSigInfo,string& strErrMsg)



Java API

采用JNI 对C++ API进行封装,目前仅支持在linux下使用。具体见tls_sig_api.tar.gz的com/tls/sigcheck/tls_sigcheck.java类com/tls/sigcheck/demo.java 为java demo事例

生成签名API

/* String strJson : IN 参数 Json格式的字符串String strPriKey: IN 参数 私有Key字符串*/public native int tls_gen_signature(String strJson,String strPriKey);/*当要获得签名json字符串时先调用tls_gen_signature 再调用getJsonWithSig ()*/public String getJsonWithSig()

验证签名API

/*  String strJsonWithSig: IN 参数 Json格式的签名字符串 String strPubKey: IN 参数 公有Key字符串 String strAccountType: IN 参数 公有Key字符串 String str3rd: IN 参数 第三方账号没有填空字符串 String Appid: IN 参数 appid String strIdentify: IN 参数 账号id*/public native int tls_check_signature_ex(String strJsonWithSig              ,String strPubKey,String strAccountType              ,String str3rd,String Appid,String strIdentify);

demo

Java demo使用方式:cd 到 tls_sig_api 目录下生成签名:java com/tls/sigcheck/demo 1 Json格式数据 私有Key 生成的带签名的Json文件例如 在tls_sig_api目录下: java com/tls/sigcheck/demo 1 example/json example/ec_key.pem sig验证签名:java com/tls/sigcheck/demo 2  生成的带签名的Json文件 公有Key strAccountType,strAppid3Rd,strAppid,strExpiry,strIdentify例如:java com/tls/sigcheck/demo 2 sig example/public.pem   107 www.qq.com 150000000 10 xxx_openid

4.附录4.1.附1 Json格式示例

业务输入:

{         “TLS.account_type”:”107”,“TLS.appid_at_3rd”:”com.xxx.yyy”,“TLS.identity:”xxx_openid”,“TLS.sdk_appid:”150000000”,“TLS.expire_after:”86400”}

API输出:整个json格式的签名,验证签名时需要把整个json字符串填入:

{         “TLS.account_type”:”107”,“TLS.appid_at_3rd”:”com.xxx.yyy”,“TLS.identity”:”xxx_openid”,“TLS.sdk_appid”:”150000000”,“TLS.expire_after”:”86400”,“TLS.time”:”2005-05-15T17:11:51ZUNIQUE”,“TLS.signed”:" TLS.appid_at_3rd ,account_type, identity,sdk_appid,time,expire_after",“TLS.sig”:”c2Rmd2VmYWZkc2Z3ZWZzZHZzZGY=”}

4.2.附2:名词规范


名称
说明
类型
App标识
SdkAppId
开发者接入音视频云通讯分配的业务Id
4字节整型
帐号标识
AccountType
自有帐号集成:接入时分配
第三方帐号集成:见附2
4字节整型
AppIdAt3rd
只针对第三方帐号集成,第三方帐号平台分配
字符串
Identifier
自有帐号集成:用户ID
第三方帐号集成:第三方帐号的OpenId
字符串
UserSig
独立模式:私钥加密生成的票据
字符串








4.3.附3:第三方AccountType定义

分类
Account_type值
含义
开放平台帐号
0
保留
1
QQ开放帐号
2
微信开放帐号
3
新浪微博开放帐号
6
支付宝开放帐号
7
豆瓣开放帐号
8
人人网开放帐号
9
百度开放帐号
10
搜狐开放帐号
11
网易开放帐号
12
开心网开放帐号
13
MSN开放帐号
14
Facebook开放帐号
15
Google开放帐号
16
Yahoo开放帐号
17
腾讯微博开放帐号


腾讯云服务商邀请关注:

http://partners.qcloud.com/invitation/99377079157835da208bd0

关注服务商的链接,提供下您关注的QQ,我们这边审核下即可快速回复您的工单问题与技术支持! 感谢您的信任与支持!

auto_1452.png

腾讯云技术交流群


ps:本站信息来源于 bbs.qcloud.com

相关文章

在线客服
淘宝购买
腾讯云直播申请 title=
+成为腾讯云VIP客户 腾讯云直播申请 客服电话

15818558013

0755-33940501-803

0755-33940501-808