本文为您介绍URL鉴权的代码示例(Python、Java、Go和PHP),您可以根据业务需要,方便的对URL进行鉴权处理。

URL鉴权规则请参见

说明 代码示例中的key参数对应控制台中URL鉴权的主KEY或备KEY。可在在直播控制台的域名管理>直播管理>访问控制>URL鉴权页面中的鉴权URL设置模块中配置或查看。

Python代码示例import re

import time

import hashlib

import datetime

def md5sum(src):

m = hashlib.md5()

m.update(src)

return m.hexdigest()

def a_auth(uri, key, exp):

p = re.compile("^(rtmp://)?([^/?]+)(/[^?]*)?(\\?.*)?$")

if not p:

return None

m = p.match(uri)

scheme, host, path, args = m.groups()

if not scheme: scheme = "rtmp://"

if not path: path = "/"

if not args: args = ""

rand = "0" # "0" by default, other value is ok

uid = "0" # "0" by default, other value is ok

sstring = "%s-%s-%s-%s-%s" %(path, exp, rand, uid, key)

hashvalue = md5sum(sstring.encode('utf-8'))

auth_key = "%s-%s-%s-%s" %(exp, rand, uid, hashvalue)

if args:

return "%s%s%s%s&auth_key=%s" %(scheme, host, path, args, auth_key)

else:

return "%s%s%s%s?auth_key=%s" %(scheme, host, path, args, auth_key)

def main():

uri = "rtmp://video-center.alivecdn.com/test/test?vhost=xc.cdnpe.com" # original uri

key = "" # private key of authorization

exp = int(time.time()) + 1 * 3600 # expiration time: 1 hour after current itme

authuri = a_auth(uri, key, exp) # auth type:

print("URL : %s\nAUTH: %s" %(uri, authuri))

if __name__ == "__main__":

main()

Java代码示例import java.math.BigInteger;

import java.nio.charset.StandardCharsets;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class AuthDemo {

private static String md5Sum(String src) {

MessageDigest md5 = null;

try {

md5 = MessageDigest.getInstance("MD5");

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

}

md5.update(StandardCharsets.UTF_8.encode(src));

return String.format("%032x", new BigInteger(1, md5.digest()));

}

private static String aAuth(String uri, String key, long exp) {

String pattern = "^(rtmp://)?([^/?]+)(/[^?]*)?(\\\\?.*)?$";

Pattern r = Pattern.compile(pattern);

Matcher m = r.matcher(uri);

String scheme = "", host = "", path = "", args = "";

if (m.find()) {

scheme = m.group(1) == null ? "rtmp://" : m.group(1);

host = m.group(2) == null ? "" : m.group(2);

path = m.group(3) == null ? "/" : m.group(3);

args = m.group(4) == null ? "" : m.group(4);

} else {

System.out.println("NO MATCH");

}

String rand = "0"; // "0" by default, other value is ok

String uid = "0"; // "0" by default, other value is ok

String sString = String.format("%s-%s-%s-%s-%s", path, exp, rand, uid, key);

String hashValue = md5Sum(sString);

String authKey = String.format("%s-%s-%s-%s", exp, rand, uid, hashValue);

if (args.isEmpty()) {

return String.format("%s%s%s%s?auth_key=%s", scheme, host, path, args, authKey);

} else {

return String.format("%s%s%s%s&auth_key=%s", scheme, host, path, args, authKey);

}

}

public static void main(String[] args) {

String uri = "rtmp://play.example.com/live/test"; // original uri

String key = ""; // private key of authorization

long exp = System.currentTimeMillis() / 1000 + 1 * 3600; // expiration time: 1 hour after current time

String authUri = aAuth(uri, key, exp); // auth type:

System.out.printf("URL : %s\nAuth: %s", uri, authUri);

}

}

Go代码示例package mainimport (

"crypto/md5"

"encoding/hex"

"fmt"

"regexp"

"time"

)

func md5sum(src string) string {

h := md5.New()

h.Write([]byte(src))

return hex.EncodeToString(h.Sum(nil))

}

func a_auth(uri, key string, exp int64) string {

p, err := regexp.Compile("^(rtmp://)?([^/?]+)(/[^?]*)?(\\?.*)?$")

if err != nil {

fmt.Println(err)

return ""

}

m := p.FindStringSubmatch(uri)

var scheme, host, path, args string

if len(m) == 5 {

scheme, host, path, args = m[1], m[2], m[3], m[4]

} else {

scheme, host, path, args = "rtmp://", "", "/", ""

}

rand := "0" // "0" by default, other value is ok

uid := "0" // "0" by default, other value is ok

sstring := fmt.Sprintf("%s-%d-%s-%s-%s", path, exp, rand, uid, key)

hashvalue := md5sum(sstring)

auth_key := fmt.Sprintf("%d-%s-%s-%s", exp, rand, uid, hashvalue)

if len(args) != 0 {

return fmt.Sprintf("%s%s%s%s&auth_key=%s", scheme, host, path, args, auth_key)

} else {

return fmt.Sprintf("%s%s%s%s?auth_key=%s", scheme, host, path, args, auth_key)

}

}

func main() {

uri := "rtmp://play.example.com/live/test" // original uri

key := "" // private key of authorization

exp := time.Now().Unix() + 3600 // expiration time: 1 hour after current itme

authuri := a_auth(uri, key, exp) // auth type:

fmt.Printf("URL : %s\nAUTH: %s", uri, authuri)

}

PHP代码示例<?php

function a_auth($uri, $key, $exp) {

preg_match("/^(rtmp:\/\/)?([^\/?]+)?(\/[^?]*)?(\\?.*)?$/", $uri, $matches);

$scheme = $matches[1];

$host = $matches[2];

$path = $matches[3];

$args = $matches[4];

if (empty($args)) {

$args ="";

}

if (empty($scheme)) {

$scheme ="rtmp://";

}

if (empty($path)) {

$path ="/";

}

$rand = "0";

// "0" by default, other value is ok

$uid = "0";

// "0" by default, other value is ok

$sstring = sprintf("%s-%u-%s-%s-%s", $path, $exp, $rand, $uid, $key);

$hashvalue = md5($sstring);

$auth_key = sprintf("%u-%s-%s-%s", $exp, $rand, $uid, $hashvalue);

if ($args) {

return sprintf("%s%s%s%s&auth_key=%s", $scheme, $host, $path, $args, $auth_key);

} else {

return sprintf("%s%s%s%s?auth_key=%s", $scheme, $host, $path, $args, $auth_key);

}

}

$uri = "rtmp://play.example.com/live/test";

$key = "";

$exp = time() + 3600;

$authuri = a_auth($uri, $key, $exp);

echo "URL :" . $uri;

echo PHP_EOL;

echo "AUTH:" . $authuri;

?>

java鉴权模块,鉴权代码示例相关推荐

  1. python画五角星代码_Python使用Turtle模块绘制五星红旗代码示例

    在Udacity上课时学到了python的turtle方法,这是一个很经典的用来教小孩儿编程的图形模块,最早起源于logo语言.python本身内置了这个模块,其可视化的方法可以帮助小孩儿对编程的一些 ...

  2. 用python函数画德国国旗代码_Python使用Turtle模块绘制五星红旗代码示例

    在Udacity上课时学到了python的turtle方法,这是一个很经典的用来教小孩儿编程的图形模块,最早起源于logo语言.python本身内置了这个模块,其可视化的方法可以帮助小孩儿对编程的一些 ...

  3. Java 泛型(generics)详解及代码示例、Java 类型通配符详解及代码示例

    Java 泛型(generics)详解及代码示例.Java 类型通配符详解及代码示例 - 概念 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制 ...

  4. cdate在java中_Java Calendar.add方法代码示例

    本文整理汇总了Java中java.util.Calendar.add方法的典型用法代码示例.如果您正苦于以下问题:Java Calendar.add方法的具体用法?Java Calendar.add怎 ...

  5. 118.网络安全渗透测试—[权限提升篇16]—[Windows MSF提权模块提权审计工具]

    我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一.MSF 结合漏洞审计工具进行提权 1.MSF漏洞审计模块:local_exploit_suggeste 2. ...

  6. java的switch_Java中Switch用法代码示例

    一.java当中的switch与C#相比有以下区别 注:在java中switch后的表达式的类型只能为以下几种:byte.short.char.int(在Java1.6中是这样),  在java1.7 ...

  7. Java文件操作(超详细+代码示例)

    Java文件操作 一.Java.io包 1.1 File类 1.2 Stream流(字节流) 1.2.1 使用FileInputStream类 1.2.2 使用FileOutputStream类 1. ...

  8. java遍历jsonobject_Java遍历JsonObject对象代码示例

    本篇文章小编给大家分享一下Java遍历JsonObject对象代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 方法代码: Iterator i ...

  9. java ladp_Java访问LDAP服务器认证代码示例

    代码示例如下: application.properties ladp_ip_addr=192.168.2.8 ladp_port_num=389 ladp_username=yyyyy ladp_p ...

最新文章

  1. Python之第一个helloworld的代码
  2. java网格式布局登录界面_Java学习笔记------自己书写的登录界面实例
  3. HTML5 Drop API
  4. python写入数据的一种措施_Python 文件数据读写的具体实现
  5. Java核心(一)线程Thread详解
  6. Oracle的Rman差异增量备份
  7. css3弹性伸缩和使用
  8. java jdom dom4j_实例分析jdom和dom4j的使用和区别
  9. Window10 Excel复制粘贴卡死
  10. HTML5 之 Link 标签
  11. delphi显示jpg、png、gif图片
  12. 极限-快速判断变限积分的等价无穷小阶数
  13. Linux下CGroup进行CPU内存等资源控制
  14. 用c语言实现作曲与播放教程~,原创哦~
  15. 祝福老婆今晚不要太生气
  16. Qt生成exe错误:无法定位程序输入点_cxa_throw_bad_array_new_length于动态链接库最终解决方法
  17. javac错误:javac不是内部或外部命令 也不是可运行的程序 解决方法
  18. Java金额每隔三位加上一个逗号
  19. Syslog日志服务器配置 For CentOS 7.8(Syslog+LogAnalyzer+LAMP)
  20. 教育平台的线上课程智能推荐策略

热门文章

  1. bootstrap多层模态框嵌套问题
  2. STM32接入机智云平台
  3. 2012年08月22日
  4. k线图分析有技巧要注意
  5. 题目:某些SELECT语句中的WHERE子句不使用索引,以下说法正确的是()
  6. IMG直播课 | 如何借助硬件光线追踪技术,实现移动端影视级画质
  7. steam无法安装32的包
  8. windowXP快速关机法
  9. 宏碁ES1-433笔记本BIOS无法更改启动项解决办法
  10. uniapp绑定base64图片