Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Web PubSub-Dienst stellt Clientereignisse mithilfe der CloudEvents-HTTP-Protokollbindung an den upstream-Webhook bereit.
Die vom Web PubSub-Dienst an den Server gesendeten Daten befinden sich immer im CloudEvents-Format binary .
- Webhook-Überprüfung
- Web PubSub CloudEvents-Attributerweiterung
-
Ereignisse
- Blockieren von Ereignissen
- Aufheben der Blockierung von Ereignissen
Webhook-Überprüfung
Die Webhook-Überprüfung folgt CloudEvents. Die Anforderung enthält WebHook-Request-Origin: xxx.webpubsub.azure.com immer den Header.
Wenn und nur, wenn das Übermittlungsziel die Übermittlung der Ereignisse zulässt, muss sie auf die Anforderung antworten, indem sie beispielsweise den Header einbezieht WebHook-Allowed-Origin :
WebHook-Allowed-Origin: *
Oder:
WebHook-Allowed-Origin: xxx.webpubsub.azure.com
Derzeit werden WebHook-Request-Rate und WebHook-Request-Callback nicht unterstützt.
Web PubSub CloudEvents-Attributerweiterung
Außerdem wurde festgestellt, dass die HTTP-Spezifikation nun einem ähnlichen Muster folgt, indem nicht mehr vorgeschlagen wird, dass Erweiterungs-HTTP-Header mit X-Präfix versehen werden.
Diese Erweiterung definiert Attribute, die von Web PubSub für jedes erzeugte Ereignis verwendet werden.
Attribute
| Name | Typ | Beschreibung | Beispiel |
|---|---|---|---|
userId |
string |
Der Benutzer, der die Verbindung authentifiziert hat | |
hub |
string |
Der Hub, zu dem die Verbindung gehört | |
connectionId |
string |
Die connectionId ist für die Clientverbindung eindeutig. | |
eventName |
string |
Der Name des Ereignisses ohne Präfix | |
subprotocol |
string |
Der Unterprotocol, den der Client verwendet, falls vorhanden | |
connectionState |
string |
Definiert den Status für die Verbindung. Sie können denselben Antwortheader verwenden, um den Wert des Zustands zurückzusetzen. Mehrere connectionState Kopfzeilen sind nicht zulässig. Codieren Sie den Zeichenfolgenwert, wenn er komplexe Zeichen enthält, base64(jsonString) z. B. um komplexe Objekte mithilfe dieses Attributs zu übergeben. |
|
signature |
string |
Die Signatur für den upstream-Webhook, um zu überprüfen, ob die eingehende Anforderung vom erwarteten Ursprung stammt. Der Dienst berechnet den Wert mit primärer Zugriffstaste und sekundärer Zugriffstaste als HMAC Schlüssel: Hex_encoded(HMAC_SHA256(accessKey, connectionId)). Der Upstream sollte überprüfen, ob die Anforderung vor der Verarbeitung gültig ist. |
Ereignisse
Es gibt zwei Arten von Ereignissen. Eines ist das Blockieren von Ereignissen, die der Dienst auf die Antwort des Ereignisses wartet, um fortzufahren. Eines ist das Aufheben der Blockierung von Ereignissen, die der Dienst nicht auf die Antwort eines solchen Ereignisses wartet, bevor die nächste Nachricht verarbeitet wird.
- Blockieren von Ereignissen
- Aufheben der Blockierung von Ereignissen
Systemereignis connect
-
ce-type:azure.webpubsub.sys.connect -
Content-Type:application/json
Anforderungsformat:
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: application/json; charset=utf-8
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.sys.connect
ce-source: /hubs/{hub}/client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub}
ce-eventName: connect
{
"claims": {},
"query": {},
"headers": {},
"subprotocols": [],
"clientCertificates": [
{
"thumbprint": "<certificate SHA-1 thumbprint>",
"content": "-----BEGIN CERTIFICATE-----\r\n...\r\n-----END CERTIFICATE-----"
}
]
}
Erfolgsantwortformat:
Kopfzeile
ce-connectionState: Wenn dieser Header vorhanden ist, wird der Verbindungsstatus dieser Verbindung auf den Wert des Headers aktualisiert. Nur blockierende Ereignisse können den Verbindungsstatus aktualisieren. Im folgenden Beispiel wird die base64-codierte JSON-Zeichenfolge verwendet, um den komplexen Zustand für die Verbindung zu speichern.Statuscode:
-
204: Erfolg ohne Inhalt. -
200: Erfolg, der Inhalt SOLLTE ein JSON-Format sein, wobei die folgenden Eigenschaften zulässig sind:subprotocolsDas
connectEreignis leitet die Unterprotocol- und Authentifizierungsinformationen vom Client an upstream weiter. Der Web PubSub-Dienst verwendet den Statuscode, um zu ermitteln, ob die Anforderung auf das WebSocket-Protokoll aktualisiert wird.Wenn die Anforderung die
subprotocolsEigenschaft enthält, sollte der Server einen unterstützten Unterprotocol zurückgeben. Wenn der Server keine Unterprotocols verwenden möchte, sollte diesubprotocolEigenschaft nicht als Antwort gesendet werden. Das Senden einer leeren Kopfzeile ist ungültig.userId:{auth-ed user ID}Da der Dienst anonyme Verbindungen zulässt, liegt es in der
connectVerantwortung des Ereignisses, dem Dienst die Benutzer-ID der Clientverbindung mitzuteilen. Der Dienst liest die Benutzer-ID aus der AntwortnutzlastuserId, sofern vorhanden. Die Verbindung wird gelöscht, wenn die Benutzer-ID nicht aus den Anforderungsansprüchen oder der Antwortnutzlast desconnectEreignisses gelesen werden kann.groups:{groups to join}Die Eigenschaft bietet eine bequeme Möglichkeit zum Hinzufügen dieser Verbindung zu einer oder mehreren Gruppen. Auf diese Weise muss keine weitere Verbindung zu einer Gruppe hinzugefügt werden.
roles:{roles the client has}Die Eigenschaft bietet eine Möglichkeit für den upstream-Webhook, den Client zu autorisieren. Es gibt verschiedene Rollen zum Erteilen von anfänglichen Berechtigungen für PubSub WebSocket-Clients. Details zu den Berechtigungen werden in Clientberechtigungen beschrieben.
-
HTTP/1.1 200 OK
ce-connectionState: eyJrZXkiOiJhIn0=
{
"groups": [],
"userId": "",
"roles": [],
"subprotocol": ""
}
Fehlerantwortformat:
-
4xx: Fehler, die Antwort von Upstream wird als Antwort für die Clientanforderung zurückgegeben.
HTTP/1.1 401 Unauthorized
Systemereignis connected
Der Dienst ruft den Upstream auf, wenn der Client den WebSocket-Handshake abgeschlossen und erfolgreich verbunden ist.
-
ce-type:azure.webpubsub.sys.connected -
Content-Type:application/json -
ce-connectionState:eyJrZXkiOiJhIn0=
Der Anforderungstext ist leeres JSON.
Anforderungsformat:
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: application/json; charset=utf-8
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.sys.connected
ce-source: /hubs/{hub}/client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub}
ce-eventName: connected
ce-subprotocol: abc
ce-connectionState: eyJrZXkiOiJhIn0=
{}
Antwortformat:
2xx: Erfolgsantwort.
connected ist ein asynchrones Ereignis, wenn der Antwortstatuscode nicht erfolgreich ist, protokolliert der Dienst einen Fehler.
HTTP/1.1 200 OK
Systemereignis disconnected
disconnected das Ereignis wird immer ausgelöst, wenn die Clientanforderung abgeschlossen wird, wenn das Connect-Ereignis Statuscode zurückgibt 2xx .
-
ce-type:azure.webpubsub.sys.disconnected -
Content-Type:application/json
Anforderungsformat:
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: application/json; charset=utf-8
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.sys.disconnected
ce-source: /hubs/{hub}/client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub}
ce-eventName: disconnected
ce-subprotocol: abc
ce-connectionState: eyJrZXkiOiJhIn0=
{
"reason": "{Reason}"
}
reasonDies
reasonbeschreibt den Grund, warum der Client die Verbindung trennt.
Antwortformat:
2xx: Erfolgsantwort.
disconnected ist ein asynchrones Ereignis, wenn der Antwortstatuscode nicht erfolgreich ist, protokolliert der Dienst einen Fehler.
HTTP/1.1 200 OK
Benutzerereignis message für die einfachen WebSocket-Clients
Der Dienst ruft den Ereignishandler für jeden WebSocket-Nachrichtenframe auf.
-
ce-type:azure.webpubsub.user.message -
Content-Type:application/octet-streamfür binären Rahmen;text/plainfür Textrahmen;
UserPayload sendet den Kunden.
Anforderungsformat:
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: application/octet-stream | text/plain | application/json
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.user.message
ce-source: /hubs/{hub}/client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub}
ce-eventName: message
ce-connectionState: eyJrZXkiOiJhIn0=
UserPayload
Erfolgsantwortformat
- Statuscode
-
204: Erfolg ohne Inhalt. -
200: Erfolg, das Format derUserResponsePayloadAntwort hängt vonContent-Typeder Antwort ab.
-
-
Content-Type:application/octet-streamfür binären Rahmen;text/plainfür Textrahmen; - Kopfzeile
Content-Type:application/octet-streamfür binären Rahmen;text/plainfür Textrahmen; - Kopfzeile
ce-connectionState: Wenn dieser Header vorhanden ist, wird der Verbindungsstatus dieser Verbindung auf den Wert des Headers aktualisiert. Nur blockierende Ereignisse können den Verbindungsstatus aktualisieren. Im folgenden Beispiel wird die base64-codierte JSON-Zeichenfolge verwendet, um den komplexen Zustand für die Verbindung zu speichern.
Wenn dies Content-Type der Name ist application/octet-stream, sendet UserResponsePayload der Dienst mithilfe des WebSocket-Frames an den Client binary . Wenn dies Content-Type der Name ist text/plain, sendet UserResponsePayload der Dienst mithilfe des WebSocket-Frames an den Client text .
HTTP/1.1 200 OK
Content-Type: application/octet-stream (for binary frame) or text/plain (for text frame)
Content-Length: nnnn
ce-connectionState: eyJrZXkiOiJhIn0=
UserResponsePayload
Fehlerantwortformat
Wenn der Statuscode nicht erfolgreich ist, wird er als Fehlerantwort betrachtet. Die Verbindung würde gelöscht , wenn der message Antwortstatuscode nicht erfolgreich ist.
Benutzerdefiniertes Benutzerereignis {custom_event} für PubSub WebSocket-Clients
Der Dienst ruft den Ereignishandler-Webhook für jede gültige benutzerdefinierte Ereignisnachricht auf.
Fall 1: Senden eines Ereignisses mit Textdaten:
{
"type": "event",
"event": "<event_name>",
"dataType" : "text",
"data": "text data"
}
Was der upstream-Ereignishandler wie unten empfängt, ist text/plain die Content-Type Http-Anforderung für CloudEvents fürdataType=text
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: text/plain
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.user.<event_name>
ce-source: /client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub_name}
ce-eventName: <event_name>
ce-subprotocol: json.webpubsub.azure.v1
ce-connectionState: eyJrZXkiOiJhIn0=
text data
Fall 2: Senden eines Ereignisses mit JSON-Daten:
{
"type": "event",
"event": "<event_name>",
"dataType" : "json",
"data": {
"hello": "world"
},
}
Was der upstream-Ereignishandler wie unten empfängt, ist application/json die Content-Type Http-Anforderung für CloudEvents fürdataType=json
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: application/json
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.user.<event_name>
ce-source: /client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub_name}
ce-eventName: <event_name>
ce-subprotocol: json.webpubsub.azure.v1
ce-connectionState: eyJrZXkiOiJhIn0=
{
"hello": "world"
}
Fall 3: Senden eines Ereignisses mit Binärdaten:
{
"type": "event",
"event": "<event_name>",
"dataType" : "binary",
"data": "aGVsbG8gd29ybGQ=" // base64 encoded binary
}
Was der upstream-Ereignishandler wie unten empfängt, ist application/octet-stream die Content-Type Http-Anforderung für CloudEvents fürdataType=binary
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: application/octet-stream
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.user.<event_name>
ce-source: /client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub_name}
ce-eventName: <event_name>
ce-subprotocol: json.webpubsub.azure.v1
<binary data>
Erfolgsantwortformat
HTTP/1.1 200 OK
Content-Type: application/octet-stream | text/plain | application/json
Content-Length: nnnn
UserResponsePayload
- Statuscode
-
204: Erfolg ohne Inhalt. -
200: Erfolg, Daten, die an den PubSub WebSocket-Client gesendet werden, hängen vomContent-Type;
-
- Kopfzeile
ce-connectionState: Wenn dieser Header vorhanden ist, wird der Verbindungsstatus dieser Verbindung auf den Wert des Headers aktualisiert. Nur blockierende Ereignisse können den Verbindungsstatus aktualisieren. Im folgenden Beispiel wird die base64-codierte JSON-Zeichenfolge verwendet, um den komplexen Zustand für die Verbindung zu speichern. - Wenn Header
Content-Typelautetapplication/octet-stream, sendetUserResponsePayloadder Dienst wie bei base64-codierter Nutzlast an den ClientdataTypebinaryzurück. Beispielantwort:{ "type": "message", "from": "server", "dataType": "binary", "data" : "aGVsbG8gd29ybGQ=" } - Wenn dies
Content-Typeder Wert isttext/plain, sendetUserResponsePayloadder Dienst mit der Nutzlastzeichenfolge an den ClientdataTypetext. - Wenn dies
Content-Typeder Wert istapplication/json, sendetUserResponsePayloadder Dienst mit Werttoken als Antwortnutzlasttext an den ClientdatadataType=json.
Fehlerantwortformat
Wenn der Statuscode nicht erfolgreich ist, wird er als Fehlerantwort betrachtet. Die Verbindung würde gelöscht , wenn der {custom_event} Antwortstatuscode nicht erfolgreich ist.
Nächste Schritte
Erstellen Sie mithilfe dieser Ressourcen Ihre eigene Anwendung: