Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Onze extensie biedt twee invoerbindingen die gericht zijn op verschillende behoeften.
-
Als u een client verbinding wilt laten maken met Azure Web PubSub Service, moet deze de URL van het service-eindpunt en een geldig toegangstoken weten. De
WebPubSubConnectioninvoerbinding produceert vereiste informatie, zodat de client deze tokengeneratie zelf niet hoeft te verwerken. Het token is tijdslimiet en kan een specifieke gebruiker verifiëren bij een verbinding. Sla het token daarom niet in de cache op of deel het tussen clients. Een HTTP-trigger die met deze invoerbinding werkt, kan worden gebruikt voor clients om de verbindingsgegevens op te halen. -
Wanneer u Static Web Apps gebruikt,
HttpTriggeris dit de enige ondersteunde trigger. In Web PubSub-scenario's helpt deWebPubSubContextinvoerbinding gebruikers bij het deserialiseren van upstream HTTP-aanvragen van de service onder Web PubSub-protocollen. Zo kunnen klanten vergelijkbare resultaten krijgen die worden vergeleken metWebPubSubTriggereenvoudig te verwerken in functies. Wanneer deze wordt gebruikt metHttpTrigger, moet de klant de httpTrigger-URL configureren in gebeurtenis-handler dienovereenkomstig.
WebPubSubConnection
Opmerking
In het volgende voorbeeld ziet u een HTTP-triggerfunctie die verbindingsgegevens van Web PubSub verkrijgt met behulp van de invoerbinding en deze retourneert via HTTP. In het volgende voorbeeld wordt het doorgegeven via een UserId queryonderdeel voor clientaanvragen, zoals ?userid={User-A}.
[Function("WebPubSubConnectionInputBinding")]
public static HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequestData req,
[WebPubSubConnectionInput(Hub = "<hub>", , UserId = "{query.userid}", Connection = "<web_pubsub_connection_name>")] WebPubSubConnection connectionInfo)
{
var response = req.CreateResponse(HttpStatusCode.OK);
response.WriteAsJsonAsync(connectionInfo);
return response;
}
const { app, input } = require('@azure/functions');
const connection = input.generic({
type: 'webPubSubConnection',
name: 'connection',
userId: '{query.userId}',
hub: '<hub>'
});
app.http('negotiate', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
extraInputs: [connection],
handler: async (request, context) => {
return { body: JSON.stringify(context.extraInputs.get('connection')) };
},
});
Maak een maponderhandeling en werk negotiate/function.json bij en kopieer de volgende JSON-codes.
{
"scriptFile": "__init__.py",
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req"
},
{
"type": "http",
"direction": "out",
"name": "$return"
},
{
"type": "webPubSubConnection",
"name": "connection",
"userId": "{query.userid}",
"hub": "<hub>",
"direction": "in"
}
]
}
Definieer de functie in negotiate/init.py.
import logging
import azure.functions as func
def main(req: func.HttpRequest, connection) -> func.HttpResponse:
return func.HttpResponse(connection)
Notitie
Volledige voorbeelden voor deze taal zijn in behandeling
Notitie
De Web PubSub-extensies voor Java worden nog niet ondersteund.
Geverifieerde gebruikers-id ophalen
Als de functie wordt geactiveerd door een geverifieerde client, kunt u een gebruikers-id-claim toevoegen aan het gegenereerde token. U kunt eenvoudig verificatie toevoegen aan een functie-app met behulp van App Service-verificatie.
Met App Service-verificatie worden RESPECTIEVELIJK HTTP-headers ingesteld x-ms-client-principal-id die x-ms-client-principal-name de client-principal-id en -naam van de geverifieerde gebruiker bevatten.
U kunt de UserId eigenschap van de binding instellen op de waarde vanuit een header met behulp van een bindingexpressie: {headers.x-ms-client-principal-id} of {headers.x-ms-client-principal-name}.
[Function("WebPubSubConnectionInputBinding")]
public static HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequestData req,
[WebPubSubConnectionInput(Hub = "<hub>", , UserId = "{headers.x-ms-client-principal-id}", Connection = "<web_pubsub_connection_name>")] WebPubSubConnection connectionInfo)
{
var response = req.CreateResponse(HttpStatusCode.OK);
response.WriteAsJsonAsync(connectionInfo);
return response;
}
const { app, input } = require('@azure/functions');
const connection = input.generic({
type: 'webPubSubConnection',
name: 'connection',
userId: '{headers.x-ms-client-principal-id}',
hub: '<hub>'
});
app.http('negotiate', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
extraInputs: [connection],
handler: async (request, context) => {
return { body: JSON.stringify(context.extraInputs.get('connection')) };
},
});
Maak een maponderhandeling en werk negotiate/function.json bij en kopieer de volgende JSON-codes.
{
"scriptFile": "__init__.py",
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req"
},
{
"type": "http",
"direction": "out",
"name": "$return"
},
{
"type": "webPubSubConnection",
"name": "connection",
"userId": "{headers.x-ms-client-principal-id}",
"hub": "<hub>",
"direction": "in"
}
]
}
Definieer de functie in negotiate/init.py.
import logging
import azure.functions as func
def main(req: func.HttpRequest, connection) -> func.HttpResponse:
return func.HttpResponse(connection)
Notitie
Volledige voorbeelden voor deze taal zijn in behandeling
Notitie
De Web PubSub-extensies voor Java worden nog niet ondersteund.
Configuratie
In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u hebt ingesteld in het function.json-bestand en het WebPubSubConnection kenmerk.
| function.json-eigenschap | Kenmerkeigenschap | Beschrijving |
|---|---|---|
| soort | n.v.t. | Moet worden ingesteld op webPubSubConnection |
| richting | n.v.t. | Moet worden ingesteld op in |
| naam | n.v.t. | Variabelenaam die wordt gebruikt in functiecode voor het bindingsobject voor invoerverbindingen. |
| naaf | Knooppunt | Vereist: de waarde moet worden ingesteld op de naam van de Web PubSub-hub om de functie te activeren. We ondersteunen het instellen van de waarde in kenmerk als hogere prioriteit, of deze kan worden ingesteld in app-instellingen als een globale waarde. |
| userId | Gebruikers-id | Optioneel: de waarde van de claim voor de gebruikers-id die moet worden ingesteld in het toegangssleuteltoken. |
| clientProtocol | ClientProtocol | Optioneel: het clientprotocoltype. Geldige waarden zijn onder andere default en mqtt. Voor MQTT-clients moet u deze instellen op mqtt. Voor andere clients kunt u de eigenschap weglaten of instellen op default. |
| verbinding | Verbinding | Vereist: de naam van de app-instelling die de Web PubSub-service bevat verbindingsreeks (standaard ingesteld op 'WebPubSubConnectionString'). |
Gebruik
WebPubSubConnection biedt de volgende eigenschappen.
| Bindingsnaam | Bindingstype | Beschrijving |
|---|---|---|
| BaseUri | URI | Web PubSub-clientverbindings-URI. |
| URI | URI | Absolute URI van de Web PubSub-verbinding, bevat AccessToken gegenereerde basis op de aanvraag. |
| AccessToken | tekenreeks | Gegenereerd AccessToken op basis van aanvraag UserId en servicegegevens. |
WebPubSubConnection biedt de volgende eigenschappen.
| Bindingsnaam | Beschrijving |
|---|---|
| baseUrl | Web PubSub-clientverbindings-URI. |
| URL | Absolute URI van de Web PubSub-verbinding, bevat AccessToken gegenereerde basis op de aanvraag. |
| accessToken | Gegenereerd AccessToken op basis van aanvraag UserId en servicegegevens. |
Notitie
De Web PubSub-extensies voor Java worden nog niet ondersteund.
Meer aanpassing van gegenereerd token
Beperkt tot de bindingparametertypen bieden geen ondersteuning voor het doorgeven van een lijst of matrix. De WebPubSubConnection parameter wordt niet volledig ondersteund met alle parameters die de SERVER-SDK heeft, met name rolesen bevat en bevat groups ook expiresAfter.
Wanneer de klant rollen moet toevoegen of het bouwen van het toegangstoken in de functie moet vertragen, raden we u aan om te werken met de server-SDK voor C#.
[Function("WebPubSubConnectionCustomRoles")]
public static HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequestData req)
{
var serviceClient = new WebPubSubServiceClient(new Uri(endpoint), "<hub>", "<web-pubsub-connection-string>");
var userId = req.Query["userid"].FirstOrDefault();
// your method to get custom roles.
var roles = GetRoles(userId);
var url = await serviceClient.GetClientAccessUriAsync(TimeSpan.FromMinutes(5), userId, roles);
var response = req.CreateResponse(HttpStatusCode.OK);
response.WriteString(url.ToString());
return response;
}
Wanneer de klant rollen moet toevoegen of het bouwen van het toegangstoken in de functie moet vertragen, raden we u aan om te werken met de server-SDK voor JavaScript.
const { app } = require('@azure/functions');
const { WebPubSubServiceClient } = require('@azure/web-pubsub');
app.http('negotiate', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
handler: async (request, context) => {
const serviceClient = new WebPubSubServiceClient(process.env.WebPubSubConnectionString, "<hub>");
let token = await serviceClient.getAuthenticationToken({ userId: req.query.userid, roles: ["webpubsub.joinLeaveGroup", "webpubsub.sendToGroup"] });
return { body: token.url };
},
});
Notitie
Volledige voorbeelden voor deze taal zijn in behandeling
Notitie
De Web PubSub-extensies voor Java worden nog niet ondersteund.
WebPubSubContext
Opmerking
// validate method when upstream set as http://<func-host>/api/{event}
[Function("validate")]
public static HttpResponseData Validate(
[HttpTrigger(AuthorizationLevel.Anonymous, "options")] HttpRequestData req,
[WebPubSubContextInput] WebPubSubContext wpsReq)
{
return BuildHttpResponseData(req, wpsReq.Response);
}
// Respond AbuseProtection to put header correctly.
private static HttpResponseData BuildHttpResponseData(HttpRequestData request, SimpleResponse wpsResponse)
{
var response = request.CreateResponse();
response.StatusCode = (HttpStatusCode)wpsResponse.Status;
response.Body = response.Body;
foreach (var header in wpsResponse.Headers)
{
response.Headers.Add(header.Key, header.Value);
}
return response;
}
const { app, input } = require('@azure/functions');
const wpsContext = input.generic({
type: 'webPubSubContext',
name: 'wpsContext'
});
app.http('connect', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
extraInputs: [wpsContext],
handler: async (request, context) => {
var wpsRequest = context.extraInputs.get('wpsContext');
return { "userId": wpsRequest.request.connectionContext.userId };
}
});
Notitie
Volledige voorbeelden voor deze taal zijn in behandeling
Notitie
De Web PubSub-extensies voor Java worden nog niet ondersteund.
Configuratie
In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u hebt ingesteld in het functions.json-bestand en het WebPubSubContext kenmerk.
| function.json-eigenschap | Kenmerkeigenschap | Beschrijving |
|---|---|---|
| soort | n.v.t. | Moet worden ingesteld op webPubSubContext. |
| richting | n.v.t. | Moet worden ingesteld op in. |
| naam | n.v.t. | Variabelenaam die wordt gebruikt in functiecode voor invoer web pubsub-aanvraag. |
| verbinding | Verbinding | Optioneel: de naam van een app-instellingen of verzameling die de upstream Azure Web PubSub-service aangeeft. De waarde wordt gebruikt voor misbruikbeveiliging en handtekeningvalidatie. De waarde wordt standaard automatisch omgezet met WebPubSubConnectionString. En null betekent dat de validatie niet nodig is en altijd slaagt. |
Belangrijk
Voor optimale beveiliging moet uw functie-app beheerde identiteiten gebruiken bij het maken van verbinding met de Web PubSub-service in plaats van een verbindingsreeks, die een gedeelde geheime sleutel bevat. Zie Een beheerde identiteitsaanvraag autoriseren met behulp van Microsoft Entra-id voor meer informatie.
Gebruik
WebPubSubContext biedt de volgende eigenschappen.
| Bindingsnaam | Bindingstype | Beschrijving | Eigenschappen |
|---|---|---|---|
| aanvraag | WebPubSubEventRequest |
Aanvraag van client, zie de volgende tabel voor meer informatie. |
WebPubSubConnectionContext van de aanvraagheader en andere eigenschappen die zijn gedeserialiseerd vanuit de hoofdtekst van de aanvraag, beschrijven de aanvraag, bijvoorbeeld ReasonDisconnectedEventRequest. |
| antwoord | HttpResponseMessage |
Reactie van extensie-builds voornamelijk voor AbuseProtection en foutencases. |
- |
| foutmelding | tekenreeks | Beschrijf de foutdetails bij het verwerken van de upstream-aanvraag. | - |
| hasError | Bool | Vlag om aan te geven of het een geldige Web PubSub-upstream-aanvraag is. | - |
| isPreflight | Bool | Vlag om aan te geven of het een voorbereidende aanvraag van AbuseProtectionis. |
- |
Voor WebPubSubEventRequest, het wordt gedeserialiseerd naar verschillende klassen die verschillende informatie over het aanvraagscenario bieden. Voor PreflightRequest of niet geldige gevallen kan de gebruiker de vlaggen IsPreflight controleren en HasError weten. We raden u aan om rechtstreeks reactie van systeembuilds WebPubSubContext.Response te retourneren, of de klant kan fouten op aanvraag registreren. In verschillende scenario's kan de klant de aanvraageigenschappen als volgt lezen.
| Afgeleide klasse | Beschrijving | Eigenschappen |
|---|---|---|
PreflightRequest |
Wordt gebruikt in AbuseProtection wanneer IsPreflight waar is |
- |
ConnectEventRequest |
Wordt gebruikt in het gebeurtenistype van het systeem Connect |
Claims, Query, Subprotocollen, Clientcertificaten |
ConnectedEventRequest |
Wordt gebruikt in het gebeurtenistype van het systeem Connected |
- |
UserEventRequest |
Wordt gebruikt in het gebeurtenistype van de gebruiker | Gegevens, DataType |
DisconnectedEventRequest |
Wordt gebruikt in het gebeurtenistype van het systeem Disconnected |
Reden |
Notitie
Hoewel het
WebPubSubContexteen invoerbinding is die vergelijkbaar is met deserialiseren vanHttpTriggeraanvragen in vergelijking metWebPubSubTrigger, zijn er beperkingen, dat wil zeggen dat de verbindingsstatus na samenvoegen niet wordt ondersteund. Het retourantwoord wordt nog steeds gerespecteerd door de servicezijde, maar gebruikers moeten het antwoord zelf bouwen. Als gebruikers het antwoord op de gebeurtenis moeten instellen, moet u eenHttpResponseMessagebevatConnectEventResponseof berichten voor de gebruikers gebeurtenis retourneren als hoofdtekst van het antwoord en de verbindingsstatus met de sleutelce-connectionstatein de antwoordheader plaatsen.