2024/07/16 11:54:46
实现 HTTP Token 认证
在使用灵动课堂 RESTful API 前,你需要通过 HTTP Token 认证。灵动课堂支持使用 EducationToken 进行认证。
认证时,你需要在 HTTP 请求中 header 的 Authorization: agora token=
字段填入服务端生成的 EducationToken。关于如何生成 EducationToken,可参考生成器代码。
示例代码如下:
- Java
- Golang
- Node.js
- Python
Java
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
// 基于 Java 实现的 HTTP 基本认证示例,使用 RTC 的服务端 RESTful API
class TokenAuthExample {
public static void main(String[] args) throws IOException, InterruptedException {
// 请输入你生成的 EducationToken
final String tokenValue = "input your token value here";
// 请输入你的 AppID
final String appID = "input your app ID here";
String urlStr = String.format(
"https://api.agora.io/dev/v2/project/%s/rtm/vendor/user_events",
appID
);
String authValue = String.format("agora token=%s", tokenValue);
// 创建 HTTP 请求对象
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(urlStr))
.GET()
.header("Authorization", authValue)
.header("Content-Type", "application/json")
.build();
// 发送 HTTP 请求
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Go
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
if err := tokenAuthExamle(); err != nil {
panic(err)
}
}
// 基于 Golang 实现的 HTTP Token 认证示例,使用 RTC 的服务端 RESTful API
func tokenAuthExamle() error {
var (
// 输入你生成的 Token
tokenValue = "input the token value here"
// 输入你的 AppID
appID = "input your app ID here"
urlstr = fmt.Sprintf("https://api.agora.io/dev/v2/project/%s/rtm/vendor/user_events", appID)
authValue = fmt.Sprintf("agora token=%s", tokenValue)
)
// 构造 HTTP 请求
req, err := http.NewRequest(http.MethodGet, urlstr, nil)
if err != nil {
return fmt.Errorf("failed to new http request, %w", err)
}
// 设置 Authorization header
req.Header.Set("Authorization", authValue)
req.Header.Set("Content-Type", "application/json")
// 发送 HTTP 请求
resp, err := http.DefaultClient.Do(req)
if err != nil {
return fmt.Errorf("failed to send request, %w", err)
}
defer resp.Body.Close()
// 读取响应体
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return fmt.Errorf("failed to read response body, %w", err)
}
// 判定 StatusCode
if resp.StatusCode/100 != 2 {
return fmt.Errorf("StatusCode(%d) != 2xx, %s", resp.StatusCode, string(body))
}
// 打印出正常返回的响应体
fmt.Println(string(body))
return nil
}
JavaScript
// 基于 node.js 实现的 Token 认证示例,使用 RTM 的用户事件 RESTful API
const https = require("https");
// 请输入你生成的 EducationToken
var token_value = "input your token here";
// 请输入你的 AppID
var app_id = "input your app ID";
var url_path = `/dev/v2/project/${app_id}/rtm/vendor/user_events`;
var auth_token = `agora token=${token_value}`;
// 设置请求参数
const options = {
hostname: "api.agora.io",
port: 443,
path: url_path,
method: "GET",
headers: {
// 在 header 中添加 Authorization 字段
Authorization: auth_token,
"Content-Type": "application/json",
},
};
const req = https.request(options, (res) => {
console.log(`Status code: ${res.statusCode}`);
res.on("data", (d) => {
process.stdout.write(d);
});
});
req.on('error', error => {
console.error(error)
});
req.end();
Python
import http.client
# 基于 Python 实现的 Token 认证示例,使用 RTM 的用户事件 RESTful API
# 请输入你生成的 Token
token_value = "input your token here"
# 请输入你的 AppID
app_id = "input your app ID here"
url_path = "/dev/v2/project/{0}/rtm/vendor/user_events".format(app_id)
auth_value = "agora token={0}".format(token_value)
# 通过基本 URL 创建连接对象
conn = http.client.HTTPSConnection("api.agora.io")
# 创建 header
headers = {}
# 添加鉴权 header
headers['Authorization'] = auth_value
headers['Content-Type'] = 'application/json'
payload = ""
# 发送请求
conn.request("GET", url_path, payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))