Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Прежде чем клиент сможет подключиться к службе Azure SignalR, необходимо получить URL-адрес конечной точки службы и действительный маркер доступа. Входная привязка SignalRConnectionInfo создает URL-адрес конечной точки службы SignalR и допустимый маркер, которые используются для подключения к службе. Маркер ограничен временем и может использоваться для проверки подлинности конкретного пользователя в подключении. Таким образом, не следует кэшировать маркер или совместно использовать его между клиентами. Обычно для получения сведений о подключении клиенты используют SignalRConnectionInfo с триггером HTTP.
Дополнительные сведения об использовании этой привязки для создания функции "согласование", совместимой с клиентским пакетом SDK SignalR, см. в Функции Azure разработке и настройке с Служба Azure SignalR.
Если не явно объявлено, предположим, что примеры используют значение AzureSignalRConnectionStringпараметра подключения по умолчанию. Сведения об установке и настройке см. в обзорной статье.
Пример
Вы можете создать функцию C# с помощью одного из следующих режимов C#:
- Изолированная рабочая модель: скомпилированная функция C#, которая выполняется в рабочем процессе, изолированном от среды выполнения. Изолированный рабочий процесс необходим для поддержки функций C#, работающих в долгосрочной поддержке (LTS) и версиях, отличных от LTS для .NET и .NET Framework.
- Модель в процессе: скомпилированная функция C#, которая выполняется в том же процессе, что и среда выполнения Функций Azure.
- Скрипт C#: используется в основном при создании функций C# в портал Azure.
Внимание
Поддержка будет завершена для модели в процессе 10 ноября 2026 г. Настоятельно рекомендуется перенести приложения в изолированную рабочую модель для полной поддержки.
В следующем примере показана функция C#, получающая сведения о подключении SignalR с помощью входной привязки и возвращающая их по протоколу HTTP.
[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;
}
В следующем примере показана входная привязка для сведений о подключении SignalR в файле function.json и функция, использующая привязку для возврата сведений о подключении.
Данные привязки для примера в файле function.json:
{
"type": "signalRConnectionInfo",
"name": "connectionInfo",
"hubName": "hubName1",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "in"
}
Ниже показан код JavaScript.
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],
});
Скоро должны появиться полные примеры PowerShell.
В следующем примере показана входная привязка для сведений о подключении SignalR в файле function.json и функция Python, использующая привязку для возврата сведений о подключении.
Ниже приведен код Python.
def main(req: func.HttpRequest, connectionInfoJson: str) -> func.HttpResponse:
return func.HttpResponse(
connectionInfoJson,
status_code=200,
headers={
'Content-type': 'application/json'
}
)
В следующем примере показана функция Java, получающая сведения о подключении SignalR с помощью входной привязки и возвращающая их по протоколу HTTP.
@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;
}
Атрибуты
Библиотеки C# в процессе и изолированном рабочем процессе используют атрибут для определения функции. Вместо этого в скрипте C# используется файл конфигурации function.json.
В следующей таблице описываются свойства атрибута SignalRConnectionInfoInput.
| Свойство атрибута | Описание |
|---|---|
| Имя концентратора | Обязательный. Имя концентратора. |
| ConnectionStringSetting | Имя коллекции параметров или параметров приложения, содержащей Служба SignalR строка подключения, в которой по умолчанию задано AzureSignalRConnectionStringзначение . |
| UserId | Необязательно. Идентификатор пользователя подключения SignalR. Выражение привязки можно использовать для привязки значения к заголовку или запросу HTTP-запроса. |
| IdToken | Необязательно. JWT, утверждения которого будут добавлены в утверждения пользователя. Его следует использовать вместе с ClaimTypeList. Выражение привязки можно использовать для привязки значения к заголовку или запросу HTTP-запроса. |
| ClaimTypeList | Необязательно. Список типов утверждений, которые фильтруют утверждения в IdToken . |
Заметки
В следующей таблице описаны поддерживаемые параметры заметки SignalRConnectionInfoInput.
| Параметр | Описание |
|---|---|
| имя | Имя переменной, используемой в коде функции для объекта сведений о подключении. |
| hubName | Обязательный. Имя концентратора. |
| connectionStringSetting | Имя коллекции параметров или параметров приложения, содержащей Служба SignalR строка подключения, в которой по умолчанию задано AzureSignalRConnectionStringзначение . |
| userId | Необязательно. Идентификатор пользователя подключения SignalR. Выражение привязки можно использовать для привязки значения к заголовку или запросу HTTP-запроса. |
| idToken | Необязательно. JWT, утверждения которого будут добавлены в утверждения пользователя. Его следует использовать вместе с claimTypeList. Выражение привязки можно использовать для привязки значения к заголовку или запросу HTTP-запроса. |
| claimTypeList | Необязательно. Список типов утверждений, которые фильтруют утверждения в idToken . |
Заметки
В следующей таблице описаны поддерживаемые параметры заметки SignalRConnectionInfoInput.
| Параметр | Описание |
|---|---|
| имя | Имя переменной, используемой в коде функции для объекта сведений о подключении. |
| hubName | Обязательный. Имя концентратора. |
| connectionStringSetting | Имя коллекции параметров или параметров приложения, содержащей Служба SignalR строка подключения, в которой по умолчанию задано AzureSignalRConnectionStringзначение . |
| userId | Необязательно. Идентификатор пользователя подключения SignalR. Выражение привязки можно использовать для привязки значения к заголовку или запросу HTTP-запроса. |
| idToken | Необязательно. JWT, утверждения которого будут добавлены в утверждения пользователя. Его следует использовать вместе с claimTypeList. Выражение привязки можно использовать для привязки значения к заголовку или запросу HTTP-запроса. |
| claimTypeList | Необязательно. Список типов утверждений, которые фильтруют утверждения в idToken . |
Настройка
В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json.
| Свойство в function.json | Описание |
|---|---|
| тип | Должен иметь значениеsignalRConnectionInfo. |
| направление | Должен иметь значениеin. |
| hubName | Обязательный. Имя концентратора. |
| connectionStringSetting | Имя коллекции параметров или параметров приложения, содержащей Служба SignalR строка подключения, в которой по умолчанию задано AzureSignalRConnectionStringзначение . |
| userId | Необязательно. Идентификатор пользователя подключения SignalR. Выражение привязки можно использовать для привязки значения к заголовку или запросу HTTP-запроса. |
| idToken | Необязательно. JWT, утверждения которого будут добавлены в утверждения пользователя. Его следует использовать вместе с claimTypeList. Выражение привязки можно использовать для привязки значения к заголовку или запросу HTTP-запроса. |
| claimTypeList | Необязательно. Список типов утверждений, которые фильтруют утверждения в idToken . |
Предупреждение
Для простоты мы опустим части проверки подлинности и авторизации в этом примере. В результате эта конечная точка общедоступна без каких-либо ограничений. Чтобы обеспечить безопасность конечной точки переговоров, необходимо реализовать соответствующие механизмы проверки подлинности и авторизации на основе конкретных требований. Рекомендации по защите конечных точек HTTP см. в следующих статьях:
Использование
Подключения на основе управляемых удостоверений
Для оптимальной безопасности приложение-функция должно использовать управляемые удостоверения при подключении к службе Azure SignalR вместо использования строки подключения, содержащей общий секретный ключ. Дополнительные сведения см. в статье "Авторизация запросов на Служба Azure SignalR ресурсов с помощью управляемых удостоверений Microsoft Entra".
Прошедшие проверку подлинности маркеры
Когда клиент, прошедший проверку подлинности, активирует функцию, можно добавить утверждение идентификатора пользователя в созданный маркер. Вы можете легко добавить аутентификацию к приложению-функции с помощью аутентификации Службы приложений.
Проверка подлинности службы приложений задает заголовки HTTP x-ms-client-principal-id и x-ms-client-principal-name, содержащие имя и идентификатор субъекта клиента прошедшего проверку подлинности пользователя соответственно.
В качестве значения свойства UserId привязки можно задать один из заголовков с помощью выражения привязки: {headers.x-ms-client-principal-id} или {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;
}
Данные привязки в файле function.json:
{
"type": "signalRConnectionInfo",
"name": "connectionInfo",
"hubName": "hubName1",
"userId": "{headers.x-ms-client-principal-id}",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "in"
}
Ниже показан код JavaScript.
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],
});
Скоро должны появиться полные примеры PowerShell.
Ниже приведен код Python.
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;
}
Выражения привязки для триггера HTTP
Это распространенный сценарий, когда значения некоторых атрибутов входной привязки SignalR приходят из HTTP-запросов. Поэтому мы покажем, как привязать значения из HTTP-запросов к атрибутам входной привязки SignalR через выражение привязки.
| Тип метаданных HTTP | Формат выражения привязки | Описание | Пример |
|---|---|---|---|
| ЗАПРОС HTTP-запроса | {query.QUERY_PARAMETER_NAME} |
Привязывает значение соответствующего параметра запроса к атрибуту | {query.userName} |
| Заголовок HTTP-запроса | {headers.HEADER_NAME} |
Привязывает значение заголовка к атрибуту | {headers.token} |