Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Mielőtt egy ügyfél csatlakozni tud az Azure SignalR szolgáltatáshoz, le kell kérnie a szolgáltatásvégpont URL-címét és egy érvényes hozzáférési jogkivonatot. A SignalRConnectionInfo bemeneti kötés létrehozza a SignalR szolgáltatás végpontJÁNAK URL-címét és egy érvényes jogkivonatot, amely a szolgáltatáshoz való csatlakozáshoz használatos. A jogkivonat időkorlátos, és egy adott felhasználó hitelesítésére használható egy kapcsolathoz. Ezért nem szabad gyorsítótárba helyeznie a jogkivonatot, és nem szabad megosztania az ügyfelek között. A SignalRConnectionInfo-t általában HTTP-eseményindítóval használja az ügyfelek számára a kapcsolati adatok lekéréséhez.
Ha többet szeretne tudni arról, hogy hogyan használhatja ezt a kötést egy SignalR-ügyfél SDK-val kompatibilis "egyeztetési" függvény létrehozásához, tekintse meg az Azure Functions fejlesztésével és az Azure SignalR Szolgáltatással való konfigurálásáról szóló cikket.
Ha nincs explicit módon deklarálva, tegyük fel, hogy a példák az alapértelmezett kapcsolatbeállítási AzureSignalRConnectionStringértéket használják. A beállítással és a konfigurációval kapcsolatos információkért tekintse meg az áttekintést.
Példa
C# függvényt az alábbi C# módok egyikével hozhat létre:
- Izolált feldolgozómodell: Lefordított C# függvény, amely a futtatókörnyezettől elkülönített feldolgozói folyamatban fut. Izolált feldolgozói folyamat szükséges a hosszú távú támogatáson (LTS) futó C# függvények támogatásához, valamint a .NET és a .NET-keretrendszer nem LTS-verzióihoz.
- Folyamatban lévő modell: Lefordított C# függvény, amely ugyanabban a folyamatban fut, mint az Azure Functions futtatókörnyezete.
- C#-szkript: Elsősorban C#-függvények Azure Portalon való létrehozásakor használatos.
Fontos
A folyamaton belüli modell támogatása 2026. november 10-én megszűnik. Erősen javasoljuk, hogy az alkalmazásokat az elkülönített feldolgozói modellbe migrálja a teljes támogatás érdekében.
Az alábbi példa egy C# függvényt mutat be, amely a bemeneti kötéssel szerzi be a SignalR kapcsolati adatait, és HTTP-n keresztül adja vissza.
[Function(nameof(Negotiate))]
public static string Negotiate([HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequestData req,
[SignalRConnectionInfoInput(HubName = "serverless")] string connectionInfo)
{
// The serialization of the connection info object is done by the framework. It should be camel case. The SignalR client respects the camel case response only.
return connectionInfo;
}
Az alábbi példa egy SignalR kapcsolatinformációs bemeneti kötést mutat be egy function.json fájlban, és egy függvényt, amely a kötést használja a kapcsolati adatok visszaadásához.
Az alábbi kötési adatok a function.json fájlban lévő példához:
{
"type": "signalRConnectionInfo",
"name": "connectionInfo",
"hubName": "hubName1",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "in"
}
A JavaScript-kód a következő:
const { app, input } = require('@azure/functions');
const inputSignalR = input.generic({
type: 'signalRConnectionInfo',
name: 'connectionInfo',
hubName: 'hubName1',
connectionStringSetting: 'AzureSignalRConnectionString',
});
app.post('negotiate', {
authLevel: 'function',
handler: (request, context) => {
return { body: JSON.stringify(context.extraInputs.get(inputSignalR)) }
},
route: 'negotiate',
extraInputs: [inputSignalR],
});
A Teljes PowerShell-példák függőben vannak.
Az alábbi példa egy SignalR-kapcsolatadatok bemeneti kötését mutatja be egy function.json fájlban, valamint egy Python-függvényt , amely a kötést használja a kapcsolati adatok visszaadásához.
A Python-kód a következő:
def main(req: func.HttpRequest, connectionInfoJson: str) -> func.HttpResponse:
return func.HttpResponse(
connectionInfoJson,
status_code=200,
headers={
'Content-type': 'application/json'
}
)
Az alábbi példa egy Java-függvényt mutat be, amely a bemeneti kötés használatával szerzi be a SignalR kapcsolati adatait, és HTTP-en keresztül adja vissza.
@FunctionName("negotiate")
public SignalRConnectionInfo negotiate(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST },
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> req,
@SignalRConnectionInfoInput(
name = "connectionInfo",
HubName = "hubName1") SignalRConnectionInfo connectionInfo) {
return connectionInfo;
}
Attribútumok
A folyamaton belüli és az izolált feldolgozói folyamat C#-kódtárai attribútummal határozzák meg a függvényt. A C#-szkript ehelyett function.json konfigurációs fájlt használ.
Az alábbi táblázat az attribútum tulajdonságait SignalRConnectionInfoInput ismerteti:
| Attribútumtulajdonság | Leírás |
|---|---|
| HubName | Szükséges. A központ neve. |
| ConnectionStringSetting | Annak az alkalmazásbeállításnak vagy beállításgyűjteménynek a neve, amely tartalmazza a SignalR-szolgáltatást kapcsolati sztring, amely alapértelmezés szerint a következőAzureSignalRConnectionString. |
| UserId | Opcionális. A SignalR-kapcsolat felhasználói azonosítója. Egy kötési kifejezéssel egy HTTP-kérelemfejléchez vagy -lekérdezéshez kötheti az értéket. |
| IdToken | Opcionális. Egy JWT, amelynek a jogcímei hozzá lesznek adva a felhasználói jogcímhez. A Jogcímtípuslistával együtt kell használni. Egy kötési kifejezéssel egy HTTP-kérelemfejléchez vagy -lekérdezéshez kötheti az értéket. |
| ClaimTypeList | Opcionális. A jogcímtípusok listája, amely az IdTokenben szűri a jogcímeket. |
Jegyzetek
Az alábbi táblázat a széljegyzet támogatott beállításait SignalRConnectionInfoInput ismerteti.
| Beállítás | Leírás |
|---|---|
| név | A kapcsolati információs objektum függvénykódjában használt változónév. |
| hubName | Szükséges. A központ neve. |
| connectionStringSetting | Annak az alkalmazásbeállításnak vagy beállításgyűjteménynek a neve, amely tartalmazza a SignalR-szolgáltatást kapcsolati sztring, amely alapértelmezés szerint a következőAzureSignalRConnectionString. |
| userId | Opcionális. A SignalR-kapcsolat felhasználói azonosítója. Egy kötési kifejezéssel egy HTTP-kérelemfejléchez vagy -lekérdezéshez kötheti az értéket. |
| idToken | Opcionális. Egy JWT, amelynek a jogcímei hozzá lesznek adva a felhasználói jogcímhez. A jogcímtípuslistával együtt kell használni. Egy kötési kifejezéssel egy HTTP-kérelemfejléchez vagy -lekérdezéshez kötheti az értéket. |
| claimTypeList | Opcionális. A jogcímtípusok listája, amely az idTokenben szűri a jogcímeket. |
Jegyzetek
Az alábbi táblázat a széljegyzet támogatott beállításait SignalRConnectionInfoInput ismerteti.
| Beállítás | Leírás |
|---|---|
| név | A kapcsolati információs objektum függvénykódjában használt változónév. |
| hubName | Szükséges. A központ neve. |
| connectionStringSetting | Annak az alkalmazásbeállításnak vagy beállításgyűjteménynek a neve, amely tartalmazza a SignalR-szolgáltatást kapcsolati sztring, amely alapértelmezés szerint a következőAzureSignalRConnectionString. |
| userId | Opcionális. A SignalR-kapcsolat felhasználói azonosítója. Egy kötési kifejezéssel egy HTTP-kérelemfejléchez vagy -lekérdezéshez kötheti az értéket. |
| idToken | Opcionális. Egy JWT, amelynek a jogcímei hozzá lesznek adva a felhasználói jogcímhez. A jogcímtípuslistával együtt kell használni. Egy kötési kifejezéssel egy HTTP-kérelemfejléchez vagy -lekérdezéshez kötheti az értéket. |
| claimTypeList | Opcionális. A jogcímtípusok listája, amely az idTokenben szűri a jogcímeket. |
Konfiguráció
Az alábbi táblázat a function.json fájlban beállított kötéskonfigurációs tulajdonságokat ismerteti.
| function.json tulajdonság | Leírás |
|---|---|
| típus | A beállításnak a signalRConnectionInfokövetkezőnek kell lennie: . |
| irány | A beállításnak a inkövetkezőnek kell lennie: . |
| hubName | Szükséges. A központ neve. |
| connectionStringSetting | Annak az alkalmazásbeállításnak vagy beállításgyűjteménynek a neve, amely tartalmazza a SignalR-szolgáltatást kapcsolati sztring, amely alapértelmezés szerint a következőAzureSignalRConnectionString. |
| userId | Opcionális. A SignalR-kapcsolat felhasználói azonosítója. Egy kötési kifejezéssel egy HTTP-kérelemfejléchez vagy -lekérdezéshez kötheti az értéket. |
| idToken | Opcionális. Egy JWT, amelynek a jogcímei hozzá lesznek adva a felhasználói jogcímhez. A jogcímtípuslistával együtt kell használni. Egy kötési kifejezéssel egy HTTP-kérelemfejléchez vagy -lekérdezéshez kötheti az értéket. |
| claimTypeList | Opcionális. A jogcímtípusok listája, amely az idTokenben szűri a jogcímeket. |
Figyelmeztetés
Az egyszerűség kedvéért kihagyjuk a mintában szereplő hitelesítési és engedélyezési részeket. Ennek eredményeképpen ez a végpont korlátozás nélkül nyilvánosan elérhető. A tárgyalási végpont biztonságának biztosítása érdekében a megfelelő hitelesítési és engedélyezési mechanizmusokat kell implementálnia az adott követelmények alapján. A HTTP-végpontok védelmére vonatkozó útmutatásért tekintse meg az alábbi cikkeket:
Használat
Felügyelt identitásalapú kapcsolatok
Az optimális biztonság érdekében a függvényalkalmazásnak felügyelt identitásokat kell használnia, amikor egy megosztott titkos kulcsot tartalmazó kapcsolati sztring helyett csatlakozik az Azure SignalR szolgáltatáshoz. További információ: Kérelmek engedélyezése az Azure SignalR Service-erőforrásokhoz a Microsoft Entra által felügyelt identitásokkal.
Hitelesített jogkivonatok
Amikor egy hitelesített ügyfél aktiválja a függvényt, hozzáadhat egy felhasználói azonosító jogcímet a létrehozott jogkivonathoz. Az App Service-hitelesítéssel egyszerűen hozzáadhat hitelesítést egy függvényalkalmazáshoz.
Az App Service-hitelesítés beállítja a http-fejléceket, x-ms-client-principal-id amelyek x-ms-client-principal-name tartalmazzák a hitelesített felhasználó ügyfélnév-azonosítóját és nevét.
A kötés tulajdonságát a fejlécből származó értékre állíthatja UserId egy kötési kifejezéssel: {headers.x-ms-client-principal-id} vagy {headers.x-ms-client-principal-name}.
[Function("Negotiate")]
public static string Negotiate([HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequestData req,
[SignalRConnectionInfoInput(HubName = "hubName1", UserId = "{headers.x-ms-client-principal-id}")] string connectionInfo)
{
// The serialization of the connection info object is done by the framework. It should be camel case. The SignalR client respects the camel case response only.
return connectionInfo;
}
@FunctionName("negotiate")
public SignalRConnectionInfo negotiate(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST, HttpMethod.GET },
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> req,
@SignalRConnectionInfoInput(name = "connectionInfo", hubName = "hubName1", userId = "{headers.x-ms-signalr-userid}") SignalRConnectionInfo connectionInfo) {
return connectionInfo;
}
Az alábbi kötési adatok a function.json fájlban:
{
"type": "signalRConnectionInfo",
"name": "connectionInfo",
"hubName": "hubName1",
"userId": "{headers.x-ms-client-principal-id}",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "in"
}
A JavaScript-kód a következő:
const { app, input } = require('@azure/functions');
const inputSignalR = input.generic({
type: 'signalRConnectionInfo',
name: 'connectionInfo',
hubName: 'hubName1',
connectionStringSetting: 'AzureSignalRConnectionString',
userId: '{headers.x-ms-client-principal-id}',
});
app.post('negotiate', {
authLevel: 'function',
handler: (request, context) => {
return { body: JSON.stringify(context.extraInputs.get(inputSignalR)) }
},
route: 'negotiate',
extraInputs: [inputSignalR],
});
A Teljes PowerShell-példák függőben vannak.
A Python-kód a következő:
def main(req: func.HttpRequest, connectionInfo: str) -> func.HttpResponse:
# connectionInfo contains an access key token with a name identifier
# claim set to the authenticated user
return func.HttpResponse(
connectionInfo,
status_code=200,
headers={
'Content-type': 'application/json'
}
)
@FunctionName("negotiate")
public SignalRConnectionInfo negotiate(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST },
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> req,
@SignalRConnectionInfoInput(
name = "connectionInfo",
HubName = "hubName1",
userId = "{headers.x-ms-client-principal-id}") SignalRConnectionInfo connectionInfo) {
return connectionInfo;
}
Kötési kifejezések HTTP-eseményindítóhoz
Gyakori forgatókönyv, hogy a SignalR bemeneti kötés egyes attribútumainak értékei HTTP-kérésekből származnak. Ezért bemutatjuk, hogyan köthet értékeket HTTP-kérésekből a SignalR bemeneti kötési attribútumaihoz kötési kifejezéssel.
| HTTP-metaadatok típusa | Kötési kifejezés formátuma | Leírás | Példa |
|---|---|---|---|
| HTTP-kérelem lekérdezése | {query.QUERY_PARAMETER_NAME} |
A megfelelő lekérdezési paraméter értékét attribútumhoz köti | {query.userName} |
| HTTP-kérelem fejléce | {headers.HEADER_NAME} |
Egy fejléc értékét attribútumhoz köti | {headers.token} |