Как создать URL-адрес доступа клиента для клиентов
Клиент, будь то браузер 💻, мобильное приложение 📱или устройство 💡Интернета вещей, использует URL-адрес клиентского доступа для подключения и проверки подлинности с помощью ресурса.
URL-адрес следует следующему шаблону:
- Для клиентов MQTT это
wss://<service_name>.webpubsub.azure.com/clients/mqtt/hubs/<hub_name>?access_token=<token>
. - Для всех остальных клиентов это
wss://<service_name>.webpubsub.azure.com/client/hubs/<hub_name>?access_token=<token>
.
В этой статье показано несколько способов получения URL-адреса клиентского доступа.
- Для быстрого запуска скопируйте один из портал Azure
- Для разработки создайте значение с помощью пакета SDK для сервера Web PubSub
- Если вы используете идентификатор Microsoft Entra, вы также можете вызвать REST API создания маркера клиента.
Копирование из портал Azure
На вкладке "Ключи" в портал Azure есть средство генератора URL-адресов клиента, чтобы быстро создать URL-адрес клиентского доступа, как показано на следующей схеме. Входные значения здесь не хранятся.
Обратите внимание, что для клиентов MQTT следует выбрать "Клиент MQTT" в раскрывающемся меню перед текстовым полем "URL-адрес клиентского доступа".
Создание из пакета SDK службы
Тот же URL-адрес клиентского доступа можно создать с помощью пакета SDK для сервера Web PubSub.
Следуйте инструкциям по началу работы с пакетом
WebPubSubServiceClient
SDK для сервера, чтобы создать объектservice
Создайте URL-адрес клиентского доступа путем вызова
WebPubSubServiceClient.getClientAccessToken
:Создание маркера доступа клиента
// for web pubsub native clients let token = await serviceClient.getClientAccessToken(); // for mqtt clients let token = await serviceClient.getClientAccessToken({ clientProtocol: "mqtt" });
Настройка идентификатора пользователя
let token = await serviceClient.getClientAccessToken({ userId: "user1" });
Настройка времени существования маркера
let token = await serviceClient.getClientAccessToken({ expirationTimeInMinutes: 5, });
Настройка роли, которая может присоединиться
group1
непосредственно при подключении с помощью этого URL-адреса клиентского доступаlet token = await serviceClient.getClientAccessToken({ roles: ["webpubsub.joinLeaveGroup.group1"], });
Настройка роли, которую клиент может отправлять сообщения в группу
group1
непосредственно при подключении с помощью этого URL-адреса клиентского доступаlet token = await serviceClient.getClientAccessToken({ roles: ["webpubsub.sendToGroup.group1"], });
Настройка группы
group1
, присоединенной клиентом после подключения с помощью этого URL-адреса клиентского доступаlet token = await serviceClient.getClientAccessToken({ groups: ["group1"], });
В реальном коде у нас обычно есть серверная сторона для размещения логики, создающей URL-адрес клиентского доступа. При появлении запроса клиента на стороне сервера можно использовать общий рабочий процесс проверки подлинности и авторизации для проверки клиентского запроса. Только допустимые запросы клиента могут вернуть URL-адрес доступа клиента.
Создание из REST API :generateToken
Вы также можете использовать идентификатор Microsoft Entra и создать маркер, вызвав REST API создания маркера клиента.
Примечание.
Web PubSub не рекомендует создавать маркеры идентификатора Microsoft Entra для субъектов-служб Microsoft Entra ID вручную. Это связано с тем, что каждый маркер идентификатора Microsoft Entra является коротким сроком действия, обычно истекает в течение одного часа. После этого необходимо вручную создать заменяющий маркер идентификатора Microsoft Entra. Вместо этого используйте наши пакеты SDK, которые автоматически создают и заменяют истекшие маркеры идентификатора Microsoft Entra.
Выполните авторизацию из приложения , чтобы включить идентификатор Microsoft Entra.
Получите токен Microsoft Entra.
Используйте маркер Microsoft Entra для вызова
:generateToken
.Соберите следующие сведения:
Value name Получение значения TenantId TenantId — это значение идентификатора каталога (клиента) на панели обзора зарегистрированного приложения. ClientId ClientId — это значение идентификатора приложения (клиента) в области обзора зарегистрированного приложения. ClientSecret ClientSecret — это значение секрета клиента, который вы только что добавили на шаге 1. Получение маркера идентификатора Microsoft Entra из платформа удостоверений Майкрософт
Мы используем средство CURL , чтобы показать, как вызывать ИНТЕРФЕЙСы REST API. Средство упаковается в Windows 10/11, и вы можете установить средство после установки CURL.
# set necessary values, replace the placeholders with your actual values export TenantId=<your_tenant_id> export ClientId=<your_client_id> export ClientSecret=<your_client_secret> curl -X POST "https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "grant_type=client_credentials" \ --data-urlencode "client_id=$ClientId" \ --data-urlencode "client_secret=$ClientSecret" \ --data-urlencode "scope=https://webpubsub.azure.com/.default"
Приведенная выше команда curl отправляет запрос POST в конечную точку удостоверений Майкрософт, чтобы вернуть маркер идентификатора Microsoft Entra. В ответе отображается маркер идентификатора Microsoft Entra в
access_token
поле. Скопируйте и сохраните его для последующего использования.Вызов маркера идентификатора Microsoft Entra
:generateToken
# Replace the values in {} with your actual values. export Hostname={your_service_hostname} export Hub={your_hub} export Microsoft_Entra_Token={Microsoft_entra_id_token_from_previous_step} curl -X POST "https://$Hostname/api/hubs/$Hub/:generateToken?api-version=2024-01-01" \ -H "Authorization: Bearer $Microsoft_Entra_Token" \ -H "Content-Type: application/json"
Если необходимо создать маркер для клиентов MQTT, добавьте
clientType=mqtt
параметр в URL-адрес:export Hostname={your_service_hostname} export Hub={your_hub} export Microsoft_Entra_Token={Microsoft_entra_id_token_from_previous_step} curl -X POST "https://$Hostname/api/hubs/$Hub/:generateToken?api-version=2024-01-01&clientType=mqtt" \ -H "Authorization: Bearer $Microsoft_Entra_Token" \ -H "Content-Type: application/json"
После выполнения
cURL
команды вы получите ответ следующим образом:{ "token": "ABCDEFG.ABC.ABC" }