Token 是用户的凭证,由 AppID、秘钥(Appsecret)、用户ID 生成。Token 鉴权比 AppID 鉴权更复杂更安全,适用于安全性要求高的场景,例如登录音视频服务。
Token分为临时Token和正式Token。临时Token由控制台提供,适用于项目测试阶段鉴权。正式Token需业务按照既定规则自行生成,应用于正式生产环境中。
前提条件
已 创建项目(鉴权模式为 Token模式)并获取用户ID。
操作步骤
正式由 AppID、秘钥(Appsecret)、用户ID 按照既定规则生成。
前提条件
已 创建项目(鉴权模式为Token模式)并获取用户ID。
操作步骤
支持使用 Java、Python、 Go、PHP、Ruby等语言在服务端生成 Token,以下以 Java、Python、 Go为例,更多示例请联系您的技术支持人员。
生成Token
appid:=int32(12345) uid:="1234444" expiresecs:=int32(46) tk:=sctoken.NewSCToken(appid,uid,expiresecs) // 设置业务参数 tk.SetParameter("pkey1","pval1") tk.SetParameter("pkey2","pval2") // 设置业务权限 tk.SetPrivilege("pri1",300) tk.SetPrivilege("pri2",400) // 生成token 串 token:=tk.BuildToken("appkey1234")
验证Token
// 解析token串,生成SCToken对象 tk,err:=sctoken.ParseToken(token,"appkey1234") if err!=nil { // print err } else { if tk.IsValid(){ // token 有效 // do something } else { // token 已过期 } }
生成Token
app_id = 1296325 app_secret = bytearray(b'abcdefg') uid = "987654321" valid_time = 100 build_timestamp = int(time.time() * 1000) // 设置业务参数 parameter = {"pkey1": "pval1", "pkey2": "pval2"} // 设置业务权限 privileges = {"pri1": 300, "pri2": 400} // 生成token 串 token_str = SCToken().gen(app_id, app_secret, uid, parameter, privileges, build_timestamp, valid_time)
验证Token
// 解析token串,生成SCToken对象 app_secret = bytearray(b'abcdefg') token_str = "_2dllwAAAHMAADA5AAk5ODc2NTQzMjEAAgAFcGtleTIABXB2YWwyAAVwa2V5MQAFcHZhbDEAAgAEcHJpMQAAAAAAAAEsAARwcmkyAAAAAAAAAZAAAAFsuAVsTAAA6mDjTWxNCdjou_5GSCFCWLtGAgn9Ww" yt, err = SCToken().parse(token_str, app_secret) if err != None: // print "token 解析失败" else: if yt.validate(): // print "token 有效" // do something else: //print "token 过期"
生成Token
private static void genToken() throws UnsupportedEncodingException { /* * Initialize tokenBuilder, passing your appKey which can be found on developer center */ SCTokenBuilder builder = new SCTokenBuilder( new SCTokenAppSecretProvider() { @Override public String getAppsecret( int appKey ) { // app secret return "1234"; } } ); /* * Parameter: * * version: token Version, integer * * appid: appKey, integer * * uid, business definition, string * * validTime, in seconds, value less then 90 will be set to TOKEN_MIN_VALID_TIME(90s) * */ SCTokenPropertyProvider provider = new SCTokenPropertyProvider(2, 1234, "2483549835", 4*60*60); // Optional Extend parameters,defined by your app provider.getParameterProperties() // .addTokenExtendProperty("param1","content") // .addTokenExtendProperty("param2",2); // Optional privilege properties,defined by your app provider.getPrivilegeProperties() // .addTokenExtendProperty("privilege1",12345566l) // .addTokenExtendProperty("privilege2",12345566l); //Generate token according to above attribute configuration byte[] token = builder.buildBinanyToken( provider ); // In order to facilitate network transmission, // BASE 64 encoding and url_safe mode are used Base64 coder = new Base64( 76, new byte[] {}, true ); // The byte array is converted to a string to print String tokenStr = coder.encodeAsString( token ); System.out.println( "gen token:"+ tokenStr ); }
验证Token
private static void validToken(String tokenStr) throws UnsupportedEncodingException { /* * Initialize tokenBuilder, passing your appKey which can be found on develop center */ SCTokenBuilder builder = new SCTokenBuilder( new SCTokenAppSecretProvider() { @Override public String getAppsecret( int appKey ) { // app secret return "1234"; } } ); Base64 coder = new Base64( 76, new byte[] {}, true ); // parse token,make sure your token is url-safed, mean that '+' and '/' MUST NOT be found in your token if (!tokenStr.equals(URLDecoder.decode(tokenStr, "UTF-8"))) { throw new SCTokenException("token isn't url-safed"); } byte[] token = coder.decode(tokenStr.getBytes( "UTF-8" ) ); SCToken scToken = builder.validateTokenBytes( token ); System.out.println( "decode token: " + scToken.toString()); }
语言 | 示例代码 |
---|---|
Golang | 点击下载 |
Java | 点击下载 |
Python | 点击下载 V2.7 点击下载 V3.0 |
字段名称 | 类型 | 说明 |
---|---|---|
tokenVersion | int32 | Token版本 |
tokenLen | int32 | 整个Token的字节长度,包括tokenLen 字段和 DigitalSignature 字段 |
App ID | int32 | 项目ID |
uidLen | int16 | 用户ID的长度 |
uid | String | 在项目内唯一的用户ID |
parameterLen | int16 | 权限参数键值对的个数,下面的key/value可以有多个 |
key长度 | int16 | key的字节长度 |
key | String | key的内容 |
value长度 | int16 | value的字节长度 |
value | String | value的内容 |
privileges | int16 | 各项权限的键值对个数 |
key长度 | int16 | key的字节长度 |
key | String | key的内容 |
value | int64 | value的字节内容 |
buildTimestampMills | int64 | 生成Token的UTC时间(1970年以来),单位:毫秒 |
validTime | int32 | Token 的有效时长,单位:秒 |
DigitalSignature | / | 数字签名,20 字节 |
说明: