Checksum ve Kimlik Dogrulama
Her BigBlueButton API çağrısı, sunucunun shared secret değerinden hesaplanan bir checksum içermelidir. Bu mekanizma yetkisiz erişimi önler ve API isteklerini kurcalanmaya karşı korur.
Nasıl Çalışır
BBB API, bir shared-secret modelini kullanır: hem sunucu hem de çağıran uygulama aynı gizli anahtarı bilir. Gizli anahtar asla doğrudan iletilmez — bunun yerine her isteğe checksum parametresi olarak eklenen kriptografik bir hash girdisi olarak kullanılır.
shared secret son kullanıcılara asla ifşa edilmemelidir. Yalnızca entegrasyonu yapan uygulamanın sunucu tarafı yapılandırmasında yer almalıdır. Asla JavaScript, mobil uygulamalar veya başka herhangi bir istemci tarafı koda gömmeyin.
Shared Secret Değerini Alma
Gizli anahtar BigBlueButton sunucusunda /etc/bigbluebutton/bbb-web.properties içinde securitySalt özelliği olarak saklanır. Aşağıdaki komutu sunucuda çalıştırarak alabilirsiniz:
# On the BBB server:
sudo bbb-conf --secret Örnek çıktı:
URL: https://api-guide.bbbserver.com/bigbluebutton/
Secret: replace-with-secret bbbserver.de kullanıyorsanız, API URL'nizi ve
shared secret değerinizi sunucu panelinde API ayarları bölümünde bulabilirsiniz. Komut satırı araçları çalıştırmanıza gerek yoktur.Checksum Hesaplama (Adım Adım)
Aşağıdaki örnek, SHA-256 kullanarak bir create API çağrısı için checksum değerinin nasıl hesaplanacağını gösterir.
checksum dışındaki tüm parametreleri birleştirin:
name=Demo&meetingID=replace-with-meeting-id&attendeePW=replace-with-password&moderatorPW=replace-with-passwordAPI method name değerini başına ekleyin (ayırıcı olmadan):
createname=Demo&meetingID=replace-with-meeting-id&attendeePW=replace-with-password&moderatorPW=replace-with-passwordshared secret değerini sonuna ekleyin (ayırıcı olmadan):
createname=Demo&meetingID=replace-with-meeting-id&attendeePW=replace-with-password&moderatorPW=replace-with-passwordreplace-with-secretSeçilen algoritmayı kullanarak hash hesaplayın (bu örnekte SHA-256):
SHA-1: 7030bd96ede6a7ac41da848fe3bfc562e52a5914
SHA-256: 7e5a0a48f1542462e56ca034dc83d741bff1deb5feab0cd9ef74fa6e009fe1fdchecksum değerini query string sonuna checksum parametresi olarak ekleyin:
name=Demo&meetingID=replace-with-meeting-id&attendeePW=replace-with-password&moderatorPW=replace-with-password&checksum=7e5a0a48f1542462e56ca034dc83d741bff1deb5feab0cd9ef74fa6e009fe1fdDesteklenen Hash Algoritmaları
BigBlueButton, checksum hesaplaması için çeşitli hash algoritmalarını destekler. Aşağıdaki tablo mevcut tüm seçenekleri listeler:
| Algoritma | Şu Sürümden Beri Mevcut | Hash Uzunluğu |
|---|---|---|
| SHA-1 | Tüm sürümler | 40 karakter |
| SHA-256 | BBB 2.4 | 64 karakter |
| SHA-384 | BBB 2.5 | 96 karakter |
| SHA-512 | BBB 2.5 | 128 karakter |
Desteklenen algoritmalar sunucu tarafında /etc/bigbluebutton/bbb-web.properties içinde yapılandırılır:
supportedChecksumAlgorithms=sha256,sha384,sha512 Bir algoritmanın bu listeden kaldırılması, sunucuda devre dışı bırakılmasına neden olur. Varsayılan olarak dört algoritmanın tamamı etkindir.
SHA-1 artık kullanımdan kaldırılmış kabul edilir. Yeni uygulamalar için SHA-256 veya daha üstünü kullanın. Yalnızca eski entegrasyonlarla geriye dönük uyumluluğa ihtiyacınız varsa SHA-1 etkin bırakın.
POST İstekleri
BigBlueButton API'sine POST istekleri yaparken aşağıdaki kuralları göz önünde bulundurun:
checksumyalnızca URL query stringüzerinden hesaplanır.POSTgövdesi (ör. sunum XML'i veyaclientSettingsOverride), checksum hesaplamasınadahil edilmez.checksumparçası olması gereken tüm parametrelerquery stringiçine yerleştirilmelidir.
Breakout Room Yapılandırması
SHA-256 desteğini devre dışı bırakırsanız, grup odalarının düzgün çalışmaya devam etmesini sağlamak için checkSumAlgorithmForBreakouts içindeki /etc/bigbluebutton/bbb-apps-akka.conf ayarını da güncellemeniz gerekir.
Güvenlik için En İyi Uygulamalar
shared secretdeğerini yalnızca sunucu tarafında saklayın — asla JavaScript'te, mobil uygulamalarda veya diğer istemci tarafı bağlamlarda saklamayın.- İletim sırasında
checksumve parametreleri korumak için her zaman HTTPS kullanın. secretdeğerinin ele geçirildiğinden şüpheleniyorsanız, bunubbb-conf --setsecret <new-secret>kullanarak derhal değiştirin.checksummekanizması kurcalamaya karşı koruma sağlar, ancakreplay attackssaldırılarına karşı koruma sağlamaz.joinURL'leri için, geçerlilik süresini sınırlamak amacıylacreateTimeparametresini kullanmayı değerlendirin.
Kullanıcılar için join bağlantıları oluştururken, özgün createTime yanıtındaki create parametresini ekleyin. Bu, katılım bağlantısının yalnızca o belirli toplantı örneği için geçerli olmasını sağlar.
Kod Örnekleri
Aşağıdaki örnekler, bir toplantı oluşturmak için SHA-256 kullanılarak checksum hesaplamasını göstermektedir.
Python 3
import hashlib
import urllib.parse
import requests
BBB_URL = "https://api-guide.bbbserver.com/bigbluebutton/api"
BBB_SECRET = "replace-with-secret"
def bbb_checksum(call_name: str, query_string: str) -> str:
"""Calculate the BBB API checksum (SHA-256)."""
raw = call_name + query_string + BBB_SECRET
return hashlib.sha256(raw.encode("utf-8")).hexdigest()
# Create a meeting
params = urllib.parse.urlencode({
"name": "Demo",
"meetingID": "replace-with-meeting-id",
"attendeePW": "replace-with-password",
"moderatorPW": "replace-with-password",
})
checksum = bbb_checksum("create", params)
response = requests.get(f"{BBB_URL}/create?{params}&checksum={checksum}")
print(response.text) PHP
<?php
$bbbUrl = "https://api-guide.bbbserver.com/bigbluebutton/api";
$bbbSecret = "replace-with-secret";
function bbbChecksum(string $callName, string $queryString, string $secret): string {
return hash("sha256", $callName . $queryString . $secret);
}
// Create a meeting
$params = http_build_query([
"name" => "Demo",
"meetingID" => "replace-with-meeting-id",
"attendeePW" => "replace-with-password",
"moderatorPW" => "replace-with-password",
]);
$checksum = bbbChecksum("create", $params, $bbbSecret);
$response = file_get_contents("{$bbbUrl}/create?{$params}&checksum={$checksum}");
echo $response; JavaScript (Node.js)
const crypto = require("crypto");
const https = require("https");
const BBB_URL = "https://api-guide.bbbserver.com/bigbluebutton/api";
const BBB_SECRET = "replace-with-secret";
function bbbChecksum(callName, queryString) {
return crypto
.createHash("sha256")
.update(callName + queryString + BBB_SECRET)
.digest("hex");
}
// Create a meeting
const params = new URLSearchParams({
name: "Demo",
meetingID: "replace-with-meeting-id",
attendeePW: "replace-with-password",
moderatorPW: "replace-with-password",
}).toString();
const checksum = bbbChecksum("create", params);
https.get(`${BBB_URL}/create?${params}&checksum=${checksum}`, (res) => {
let data = "";
res.on("data", (chunk) => (data += chunk));
res.on("end", () => console.log(data));
}); Java
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
public class BbbApi {
static final String BBB_URL = "https://api-guide.bbbserver.com/bigbluebutton/api";
static final String BBB_SECRET = "replace-with-secret";
static String bbbChecksum(String callName, String queryString) throws Exception {
String raw = callName + queryString + BBB_SECRET;
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(raw.getBytes(StandardCharsets.UTF_8));
StringBuilder hex = new StringBuilder();
for (byte b : hash) hex.append(String.format("%02x", b));
return hex.toString();
}
public static void main(String[] args) throws Exception {
String params = "name=" + URLEncoder.encode("Demo", "UTF-8")
+ "&meetingID=replace-with-meeting-id"
+ "&attendeePW=replace-with-password"
+ "&moderatorPW=replace-with-password";
String checksum = bbbChecksum("create", params);
String url = BBB_URL + "/create?" + params + "&checksum=" + checksum;
System.out.println(url);
}
} Ruby
require "digest"
require "uri"
require "net/http"
BBB_URL = "https://api-guide.bbbserver.com/bigbluebutton/api"
BBB_SECRET = "replace-with-secret"
def bbb_checksum(call_name, query_string)
Digest::SHA256.hexdigest(call_name + query_string + BBB_SECRET)
end
# Create a meeting
params = URI.encode_www_form(
name: "Demo",
meetingID: "replace-with-meeting-id",
attendeePW: "replace-with-password",
moderatorPW: "replace-with-password"
)
checksum = bbb_checksum("create", params)
uri = URI("#{BBB_URL}/create?#{params}&checksum=#{checksum}")
puts Net::HTTP.get(uri) curl (Bash)
BBB_URL="https://api-guide.bbbserver.com/bigbluebutton/api"
BBB_SECRET="replace-with-secret"
CALL="create"
PARAMS="name=Demo&meetingID=replace-with-meeting-id&attendeePW=replace-with-password&moderatorPW=replace-with-password"
CHECKSUM=$(echo -n "${CALL}${PARAMS}${BBB_SECRET}" | sha256sum | awk '{print $1}')
curl -s "${BBB_URL}/${CALL}?${PARAMS}&checksum=${CHECKSUM}" Tam Örnek: Bir Toplantı Oluşturma ve Katılma (curl)
#!/bin/bash
BBB_URL="https://api-guide.bbbserver.com/bigbluebutton/api"
BBB_SECRET="replace-with-secret"
bbb_checksum() {
echo -n "${1}${2}${BBB_SECRET}" | sha256sum | awk '{print $1}'
}
# 1. Create a meeting
CREATE_PARAMS="name=Demo&meetingID=replace-with-meeting-id&attendeePW=replace-with-password&moderatorPW=replace-with-password"
CREATE_CS=$(bbb_checksum "create" "$CREATE_PARAMS")
curl -s "${BBB_URL}/create?${CREATE_PARAMS}&checksum=${CREATE_CS}"
# 2. Generate moderator join URL
JOIN_PARAMS="meetingID=replace-with-meeting-id&fullName=Admin&role=MODERATOR&redirect=true"
JOIN_CS=$(bbb_checksum "join" "$JOIN_PARAMS")
echo ""
echo "Moderator URL: ${BBB_URL}/join?${JOIN_PARAMS}&checksum=${JOIN_CS}"
# 3. Generate viewer join URL
JOIN_PARAMS2="meetingID=replace-with-meeting-id&fullName=Guest&role=VIEWER&redirect=true"
JOIN_CS2=$(bbb_checksum "join" "$JOIN_PARAMS2")
echo "Viewer URL: ${BBB_URL}/join?${JOIN_PARAMS2}&checksum=${JOIN_CS2}"
# 4. Check meeting status
INFO_CS=$(bbb_checksum "getMeetingInfo" "meetingID=replace-with-meeting-id")
curl -s "${BBB_URL}/getMeetingInfo?meetingID=replace-with-meeting-id&checksum=${INFO_CS}" Sıkça Sorulan Sorular
checksum, her API isteğine eklenen kriptografik bir hash değeridir. Bu, gizli anahtarın kendisini iletmeden çağıranın shared secret değerini bildiğini kanıtlar. Geçerli bir checksum olmadan BigBlueButton sunucusu isteği reddeder.SHA-256 veya daha üstünü kullanın. SHA-1 geriye dönük uyumluluk için desteklenir, ancak kullanımdan kaldırılmış kabul edilir. SHA-384 ve SHA-512, BigBlueButton 2.5 ile birlikte kullanılabilir.checksum yalnızca URL query string içeriğinden hesaplanır. POST gövdesi (örneğin presentation XML veya client settings overrides) checksum hesaplamasına dahil edilmez.bbb-conf --setsecret <new-secret> komutunu çalıştırın. Gizli anahtarı değiştirdikten sonra tüm entegre uygulamaları hemen güncelleyin; çünkü eski gizli anahtar artık kabul edilmeyecektir.supportedChecksumAlgorithms içindeki /etc/bigbluebutton/bbb-web.properties özelliğini düzenleyin ve devre dışı bırakmak istediğiniz algoritmaları kaldırın. SHA-256 desteğini devre dışı bırakırsanız, checkSumAlgorithmForBreakouts içindeki bbb-apps-akka.conf ayarını da güncelleyin.checksum, hash girdisinin bir parçası olarak shared secret değerini içerdiğinden, query parametrelerinde yapılacak herhangi bir değişiklik farklı bir hash üretecektir. Sunucu kendi tarafında checksum değerini yeniden hesaplar ve değerler eşleşmezse isteği reddeder.checksum mekanizması varsayılan olarak bir zaman damgası veya nonce içermez. join URL'lerinde replay attacks saldırılarını azaltmak için, orijinal createTime yanıtındaki create parametresini dahil edin. Bu, join bağlantısını belirli bir toplantı örneğine bağlar.