Fájlok feltöltése eszközről a felhőbe az Azure IoT Hub használatával
Ez a cikk bemutatja, hogyan:
- Az IoT Hub fájlfeltöltési képességeivel feltölthet egy fájlt az Azure Blob Storage-ba egy Azure IoT-eszköz és szolgáltatás SDK használatával.
- Értesítse az IoT Hubot, hogy a fájl sikeresen fel lett töltve, és hozzon létre egy háttérszolgáltatást a fájlfeltöltési értesítések fogadásához az IoT Hubtól az Azure IoT szolgáltatás SDK-jaival.
Bizonyos esetekben az eszközök által az IoT Hub által elfogadott, viszonylag kis méretű, eszközről felhőbe irányuló üzenetekbe küldött adatok nem képezhetők le könnyen. Az IoT Hub fájlfeltöltési képességei lehetővé teszik, hogy nagy vagy összetett adatokat helyezzen át a felhőbe. Példa:
- Videók
- Képeket tartalmazó nagyméretű fájlok
- Nagy gyakorisággal mintavételezett rezgési adatok
- Az előre feldolgozott adatok valamilyen formája
Ezeket a fájlokat általában a felhőben, olyan eszközökkel dolgozzák fel, mint az Azure Data Factory vagy a Hadoop-verem . Ha fájlokat kell feltöltenie egy eszközről, továbbra is használhatja az IoT Hub biztonságát és megbízhatóságát. Ez a cikk bemutatja, hogyan.
Ez a cikk az ebben a cikkben hivatkozott futtatható SDK-mintákat hivatott kiegészíteni.
További információk:
Fontos
Az X.509 hitelesítésszolgáltatói (CA) hitelesítést használó eszközökön a fájlfeltöltési funkció nyilvános előzetes verzióban érhető el, és engedélyezni kell az előnézeti módot. Általánosan elérhető x.509 ujjlenyomat-hitelesítést vagy X.509-tanúsítványigazolást használó eszközökön az Azure Device Provisioning Service-ben. Az IoT Hub x.509-hitelesítésével kapcsolatos további információkért lásd a támogatott X.509-tanúsítványokat.
Előfeltételek
Egy IoT Hub. Egyes SDK-hívásokhoz az IoT Hub elsődleges kapcsolati sztring szükséges, ezért jegyezze fel a kapcsolati sztring.
Regisztrált eszköz. Egyes SDK-hívásokhoz az eszköz elsődleges kapcsolati sztring szükséges, ezért jegyezze fel a kapcsolati sztring.
IoT Hub Service Connect-engedély – A fájlfeltöltési értesítési üzenetek fogadásához a háttérszolgáltatásnak Service Connect-engedélyre van szüksége. Alapértelmezés szerint minden IoT Hub egy megosztott hozzáférési szabályzattal jön létre, amely ezt az engedélyt biztosítja. További információ: Csatlakozás IoT Hubhoz.
Konfigurálja a fájlfeltöltést az IoT Hubon egy Azure Storage-fiók és egy Azure Blob Storage-tároló összekapcsolásával. Ezeket az Azure Portal, az Azure CLI vagy az Azure PowerShell használatával konfigurálhatja.
Áttekintés
Ez a útmutató két szakaszt tartalmaz:
- Fájl feltöltése eszközalkalmazásból
- Fájlfeltöltési értesítés fogadása háttéralkalmazásban
Fájl feltöltése eszközalkalmazásból
Ez a szakasz azt ismerteti, hogyan tölthet fel fájlokat egy eszközről egy IoT Hubra az Azure IoT SDK for .NET DeviceClient osztályával.
Ezt az eljárást követve feltölthet egy fájlt egy eszközről az IoT Hubra:
- Csatlakozás az IoT Hubhoz
- SAS URI lekérése az IoT Hubról
- A fájl feltöltése az Azure Storage-ba
- Az IoT Hub értesítése a fájlfeltöltés állapotáról
Eszköz csatlakoztatása az IoT Hubhoz
Az eszközalkalmazások az alábbi módszerekkel végezhetnek hitelesítést az IoT Hubon:
- X.509-tanúsítvány
- Megosztott hozzáférési kulcs
Hitelesítés X.509-tanúsítvánnyal
Eszköz csatlakoztatása az IoT Hubhoz X.509-tanúsítvány használatával:
A DeviceAuthenticationWithX509Certificate használatával olyan objektumot hozhat létre, amely eszköz- és tanúsítványinformációkat tartalmaz.
DeviceAuthenticationWithX509Certificate
második paraméterként lesz átadvaDeviceClient.Create
(2. lépés).A DeviceClient.Create használatával X.509-tanúsítvány használatával csatlakoztathatja az eszközt az IoT Hubhoz.
Ebben a példában az eszköz- és tanúsítványinformációk ki lesznek töltve a auth
DeviceAuthenticationWithX509Certificate
továbbított DeviceClient.Create
objektumban.
Ez a példa a tanúsítvány bemeneti paraméterértékeit mutatja be helyi változóként az egyértelműség érdekében. Éles rendszerben a bizalmas bemeneti paramétereket környezeti változókban vagy más biztonságosabb tárolási helyen tárolhatja. Például a gazdagépnév környezeti változójának olvasására használható Environment.GetEnvironmentVariable("HOSTNAME")
.
RootCertPath = "~/certificates/certs/sensor-thl-001-device.cert.pem";
Intermediate1CertPath = "~/certificates/certs/sensor-thl-001-device.intermediate1.cert.pem";
Intermediate2CertPath = "~/certificates/certs/sensor-thl-001-device.intermediate2.cert.pem";
DevicePfxPath = "~/certificates/certs/sensor-thl-001-device.cert.pfx";
DevicePfxPassword = "1234";
DeviceName = "MyDevice";
HostName = "xxxxx.azure-devices.net";
var chainCerts = new X509Certificate2Collection();
chainCerts.Add(new X509Certificate2(RootCertPath));
chainCerts.Add(new X509Certificate2(Intermediate1CertPath));
chainCerts.Add(new X509Certificate2(Intermediate2CertPath));
using var deviceCert = new X509Certificate2(DevicePfxPath, DevicePfxPassword);
using var auth = new DeviceAuthenticationWithX509Certificate(DeviceName, deviceCert, chainCerts);
using var deviceClient = DeviceClient.Create(
HostName,
auth,
TransportType.Amqp);
További információ a tanúsítványhitelesítésről:
- Identitások hitelesítése X.509-tanúsítványokkal
- Oktatóanyag: Tanúsítványok létrehozása és feltöltése teszteléshez
Kódminták
Az X.509-tanúsítványhitelesítés munkamintáiért lásd:
- Csatlakozás X.509-tanúsítvánnyal
- DeviceClientX509AuthenticationE2ETests
- Irányított projekt – IoT-eszközök biztonságos és nagy léptékű kiépítése az IoT Hub Device Provisioning Service-vel
Hitelesítés megosztott hozzáférési kulccsal
Hívja meg a CreateFromConnectionStringet az eszközhöz való csatlakozáshoz. Adja át az eszköz elsődleges kapcsolati sztring.
AMQP
az alapértelmezett átviteli protokoll.
static string connectionString = "{device primary connection string}";
deviceClient = DeviceClient.CreateFromConnectionString(connectionString);
SAS URI lekérése az IoT Hubról
Hívja meg a GetFileUploadSasUriAsync parancsot a fájlfeltöltés részleteinek lekéréséhez. Az SAS URI a következő lépésben egy eszközről a Blob Storage-ba való fájlfeltöltésre szolgál.
const string filePath = "TestPayload.txt";
using var fileStreamSource = new FileStream(filePath, FileMode.Open);
var fileName = Path.GetFileName(fileStreamSource.Name);
var fileUploadSasUriRequest = new FileUploadSasUriRequest
{
BlobName = fileName
};
FileUploadSasUriResponse sasUri = await _deviceClient.GetFileUploadSasUriAsync(fileUploadSasUriRequest, System.Threading.CancellationToken cancellationToken = default);
Uri uploadUri = sasUri.GetBlobUri();
Fájl feltöltése az Azure Storage-ba
Fájl feltöltése az Azure Storage-ba:
Hozzon létre egy blockBlobClient objektumot, és adjon át egy fájlfeltöltési URI-t.
Az UploadAsync metódussal feltölthet egy fájlt a Blob Storage-ba, átadva az SAS URI-t. Blobfeltöltési beállításokat és lemondási jogkivonat-paramétereket is megadhat.
Az Azure Blob-ügyfél mindig HTTPS protokollt használ a fájl Azure Storage-ba való feltöltéséhez.
Ebben a példában BlockBlobClient
a rendszer átadja az SAS URI-t egy Azure Storage blokkblobügyfél létrehozásához, és feltölti a fájlt:
var blockBlobClient = new BlockBlobClient(uploadUri);
await blockBlobClient.UploadAsync(fileStreamSource, null, null);
Az IoT Hub értesítése a fájlfeltöltés állapotáról
A CompleteFileUploadAsync használatával értesítse az IoT Hubot arról, hogy az eszközügyfél befejezte a feltöltést, és átad egy FileUploadCompletionNotification objektumot. A IsSuccess
jelölő jelzi, hogy a feltöltés sikeres volt-e. Az értesítés után az IoT Hub felszabadítja a feltöltéshez társított erőforrásokat (az SAS URI-t).
Ha a fájlfeltöltési értesítések engedélyezve vannak, az IoT Hub egy fájlfeltöltési értesítési üzenetet küld a fájlfeltöltési értesítéshez konfigurált háttérszolgáltatásoknak.
var successfulFileUploadCompletionNotification = new FileUploadCompletionNotification
{
// Mandatory. Must be the same value as the correlation id returned in the sas uri response
CorrelationId = sasUri.CorrelationId,
// Mandatory. Will be present when service client receives this file upload notification
IsSuccess = true,
// Optional, user defined status code. Will be present when service client receives this file upload notification
StatusCode = 200,
// Optional, user-defined status description. Will be present when service client receives this file upload notification
StatusDescription = "Success"
};
await _deviceClient.CompleteFileUploadAsync(successfulFileUploadCompletionNotification);
SDK-fájlfeltöltési minta
Az SDK tartalmazza ezt a fájlfeltöltési mintát.
Fájlfeltöltési értesítés fogadása háttéralkalmazásban
Létrehozhat egy háttérszolgáltatást a fájlfeltöltési értesítési üzenetek fogadásához az IoT Hubról.
A ServiceClient osztály olyan metódusokat tartalmaz, amelyekkel a szolgáltatások fájlfeltöltési értesítéseket fogadhatnak.
Szolgáltatás NuGet-csomag hozzáadása
A háttérszolgáltatás-alkalmazásokhoz a Microsoft.Azure.Devices NuGet-csomag szükséges.
Csatlakozás az IoT Hubhoz
Háttérszolgáltatást az alábbi módszerekkel csatlakoztathat az IoT Hubhoz:
- Megosztott hozzáférési szabályzat
- Microsoft Entra
Fontos
Ez a cikk a szolgáltatáshoz való csatlakozás lépéseit tartalmazza közös hozzáférésű jogosultságkód használatával. Ez a hitelesítési módszer a teszteléshez és a kiértékeléshez kényelmes, de biztonságosabb módszer a Microsoft Entra-azonosítóval vagy felügyelt identitásokkal történő hitelesítés egy szolgáltatáshoz. További információkért tekintse meg a felhőbiztonság ajánlott biztonsági eljárásait>.
Csatlakozás megosztott hozzáférési szabályzattal
Háttéralkalmazás csatlakoztatása egy eszközhöz a CreateFromConnectionString használatával. Az alkalmazásnak szolgáltatáscsatlakoztatási engedélyre van szüksége. Adja meg ezt a megosztott hozzáférési szabályzatot, kapcsolati sztring paraméterként.fromConnectionString
A megosztott hozzáférési szabályzatokról további információt az IoT Hub hozzáférésének szabályozása közös hozzáférésű jogosultságkódokkal című témakörben talál.
Példa:
using Microsoft.Azure.Devices;
static ServiceClient serviceClient;
static string connectionString = "{Shared access policy connection string}";
serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
Csatlakozás a Microsoft Entra használatával
A Microsoft Entrát használó háttéralkalmazásnak sikeresen hitelesítenie kell és be kell szereznie egy biztonsági jogkivonat hitelesítő adatait, mielőtt csatlakozik az IoT Hubhoz. Ez a jogkivonat egy IoT Hub-kapcsolati metódusnak lesz átadva. A Microsoft Entra for IoT Hub beállításával és használatával kapcsolatos általános információkért tekintse meg az IoT Hubhoz való hozzáférés Szabályozása a Microsoft Entra ID használatával című témakört.
A Microsoft Entra alkalmazás konfigurálása
Be kell állítania egy Microsoft Entra-alkalmazást, amely az előnyben részesített hitelesítési hitelesítő adatokhoz van konfigurálva. Az alkalmazás olyan paramétereket tartalmaz, mint az ügyfélkulcs, amelyeket a háttéralkalmazás használ a hitelesítéshez. Az elérhető alkalmazáshitelesítési konfigurációk a következők:
- Titkos ügyfélkód
- Tanúsítvány
- Összevont identitás hitelesítő adatai
A Microsoft Entra-alkalmazások adott szerepkör-engedélyeket igényelhetnek a végrehajtott műveletektől függően. Az IoT Hub ikerpéldány-közreműködője például az IoT Hub-eszközökhöz és modulikrekhez való olvasási és írási hozzáférés engedélyezéséhez szükséges. További információ: IoT Hub-hozzáférés kezelése Azure RBAC-szerepkör-hozzárendeléssel.
A Microsoft Entra-alkalmazások beállításáról további információt a rövid útmutatóban talál: Alkalmazás regisztrálása a Microsoft Identitásplatform.
Hitelesítés DefaultAzureCredential használatával
A Microsoft Entra segítségével a legegyszerűbben a DefaultAzureCredential használatával hitelesíthet egy háttéralkalmazást, de ajánlott egy másik módszert használni egy éles környezetben, beleértve egy adott TokenCredential
vagy pared-down ChainedTokenCredential
metódust is. Az egyszerűség kedvéért ez a szakasz a hitelesítést és az ügyfél titkos kódjának használatát DefaultAzureCredential
ismerteti. A használat DefaultAzureCredential
előnyeiről és hátrányairól további információt a DefaultAzureCredential használati útmutatója tartalmaz.
DefaultAzureCredential
támogatja a különböző hitelesítési mechanizmusokat, és meghatározza a megfelelő hitelesítőadat-típust az általa futtatott környezet alapján. Több hitelesítő adattípust próbál meg egy sorrendben használni, amíg nem talál egy működő hitelesítő adatot.
A Microsoft Entra megköveteli ezeket a NuGet-csomagokat és a hozzájuk tartozó using
utasításokat:
- Azure.Core
- Azure.Identity
using Azure.Core;
using Azure.Identity;
Ebben a példában a Microsoft Entra alkalmazásregisztrációs ügyfélkulcsa, ügyfél-azonosítója és bérlőazonosítója hozzáadódik a környezeti változókhoz. Ezek a környezeti változók az DefaultAzureCredential
alkalmazás hitelesítésére szolgálnak. A sikeres Microsoft Entra-hitelesítés eredménye egy biztonsági jogkivonat hitelesítő adatai, amelyet egy IoT Hub-kapcsolati módszernek ad át.
string clientSecretValue = "xxxxxxxxxxxxxxx";
string clientID = "xxxxxxxxxxxxxx";
string tenantID = "xxxxxxxxxxxxx";
Environment.SetEnvironmentVariable("AZURE_CLIENT_SECRET", clientSecretValue);
Environment.SetEnvironmentVariable("AZURE_CLIENT_ID", clientID);
Environment.SetEnvironmentVariable("AZURE_TENANT_ID", tenantID);
TokenCredential tokenCredential = new DefaultAzureCredential();
Az eredményül kapott TokenCredential ezután átadható egy IoT Hub-metódushoz való csatlakozásnak minden olyan SDK-ügyfél esetében, amely elfogadja a Microsoft Entra hitelesítő adatait:
Ebben a példában a TokenCredential
serviceClient kapcsolati objektum létrehozásához szükséges átadás ServiceClient.Create
történik.
string hostname = "xxxxxxxxxx.azure-devices.net";
using var serviceClient = ServiceClient.Create(hostname, tokenCredential, TransportType.Amqp);
Ebben a példában a rendszer átadja a TokenCredential
RegistryManager objektum létrehozásához.RegistryManager.Create
string hostname = "xxxxxxxxxx.azure-devices.net";
registryManager = RegistryManager.Create(hostname, tokenCredential);
Kódminta
A Microsoft Entra szolgáltatáshitelesítés működő mintájáért tekintse meg a szerepköralapú hitelesítési mintát.
Fájlfeltöltési értesítés fogadása
Fájlfeltöltési értesítés fogadása:
- Hozzon létre egy CancellationTokent.
- Hívja meg a GetFileNotificationReceivert egy értesítési fogadó létrehozásához.
- Használjon egy hurkot a ReceiveAsync használatával, hogy megvárja a fájlfeltöltési értesítést.
Példa:
// Define the cancellation token
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token = source.Token;
// Create a notification receiver
var notificationReceiver = serviceClient.GetFileNotificationReceiver();
Console.WriteLine("\nReceiving file upload notification from service");
// Check for file upload notifications
while (true)
{
var fileUploadNotification = await notificationReceiver.ReceiveAsync(token);
if (fileUploadNotification == null) continue;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("Received file upload notification: {0}",
string.Join(", ", fileUploadNotification.BlobName));
Console.ResetColor();
await notificationReceiver.CompleteAsync(fileUploadNotification);
}
SDK-fájlfeltöltési fogadó mintája
Az SDK tartalmazza ezt a fájlfeltöltési vevőmintát.
Áttekintés
Ez a útmutató két szakaszt tartalmaz:
- Fájl feltöltése eszközalkalmazásból
- Fájlfeltöltési értesítés fogadása háttéralkalmazásban
Fájl feltöltése eszközalkalmazásból
Ez a szakasz azt ismerteti, hogyan tölthet fel egy fájlt egy eszközről egy IoT Hubra a Java Azure IoT SDK DeviceClient osztályával.
Ezt az eljárást követve feltölthet egy fájlt egy eszközről az IoT Hubra:
- Az eszköz csatlakoztatása az IoT Hubhoz
- SAS URI lekérése az IoT Hubról
- A fájl feltöltése az Azure Storage-ba
- Fájlfeltöltés állapotáról szóló értesítés küldése az IoT Hubnak
Eszköz csatlakoztatása az IoT Hubhoz
Az eszközalkalmazások az alábbi módszerekkel végezhetnek hitelesítést az IoT Hubon:
- X.509-tanúsítvány
- Megosztott hozzáférési kulcs
Hitelesítés X.509-tanúsítvánnyal
Eszköz csatlakoztatása az IoT Hubhoz X.509-tanúsítvány használatával:
- Hozza létre az SSLContext objektumot a buildSSLContext használatával.
- Adja hozzá az
SSLContext
adatokat egy ClientOptions-objektumhoz . - Hívja meg a DeviceClientet az
ClientOptions
információk használatával az eszköz–IoT Hub kapcsolat létrehozásához.
Ez a példa a tanúsítvány bemeneti paraméterértékeit mutatja be helyi változóként az egyértelműség érdekében. Éles rendszerben a bizalmas bemeneti paramétereket környezeti változókban vagy más biztonságosabb tárolási helyen tárolhatja. Például egy nyilvános kulcsú tanúsítványsztring környezeti változójának olvasására használható Environment.GetEnvironmentVariable("PUBLICKEY")
.
private static final String publicKeyCertificateString =
"-----BEGIN CERTIFICATE-----\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"-----END CERTIFICATE-----\n";
//PEM encoded representation of the private key
private static final String privateKeyString =
"-----BEGIN EC PRIVATE KEY-----\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"-----END EC PRIVATE KEY-----\n";
SSLContext sslContext = SSLContextBuilder.buildSSLContext(publicKeyCertificateString, privateKeyString);
ClientOptions clientOptions = ClientOptions.builder().sslContext(sslContext).build();
DeviceClient client = new DeviceClient(connString, protocol, clientOptions);
További információ a tanúsítványhitelesítésről:
- Identitások hitelesítése X.509-tanúsítványokkal
- Oktatóanyag: Tanúsítványok létrehozása és feltöltése teszteléshez
Kódminták
Az X.509-tanúsítványhitelesítés munkamintáiért lásd:
Hitelesítés megosztott hozzáférési kulccsal
A fájlfeltöltési műveletek mindig HTTPS-t használnak, de a DeviceClient meghatározhatja az IotHubClientProtocolt más szolgáltatásokhoz, például a telemetriához, az eszköz metódusához és az ikereszközhöz.
IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;
Példányosíthatja az DeviceClient
eszközhöz való csatlakozáshoz az elsődleges kapcsolati sztring használatával.
String connString = "{IoT hub connection string}";
DeviceClient client = new DeviceClient(connString, protocol);
SAS URI lekérése az IoT Hubról
A getFileUploadSasUri meghívása FileUploadSasUriResponse objektum beszerzéséhez.
FileUploadSasUriResponse
tartalmazza ezeket a metódusokat, és visszaadja az értékeket. A visszatérési értékek átadhatók a fájlfeltöltési módszereknek.
Metódus | Visszaadott érték |
---|---|
getCorrelationId() |
Korrelációs azonosító |
getContainerName() |
Tárolónév |
getBlobName() |
A blob neve |
getBlobUri() |
Blob URI |
Példa:
FileUploadSasUriResponse sasUriResponse = client.getFileUploadSasUri(new FileUploadSasUriRequest(file.getName()));
System.out.println("Successfully got SAS URI from IoT hub");
System.out.println("Correlation Id: " + sasUriResponse.getCorrelationId());
System.out.println("Container name: " + sasUriResponse.getContainerName());
System.out.println("Blob name: " + sasUriResponse.getBlobName());
System.out.println("Blob Uri: " + sasUriResponse.getBlobUri());
A fájl feltöltése az Azure Storage-ba
Adja át a blob URI-végpontját a BlobClientBuilder.buildclientnek a BlobClient objektum létrehozásához.
BlobClient blobClient =
new BlobClientBuilder()
.endpoint(sasUriResponse.getBlobUri().toString())
.buildClient();
Az uploadFromFile meghívásával töltse fel a fájlt a Blob Storage-ba.
String fullFileName = "Path of the file to upload";
blobClient.uploadFromFile(fullFileName);
Fájlfeltöltés állapotáról szóló értesítés küldése az IoT Hubnak
Fájlfeltöltési kísérlet után küldjön egy feltöltési állapotértesítést az IoT Hubnak.
Hozzon létre egy FileUploadCompletionNotification objektumot. Adja meg a correlationId
isSuccess
sikeres fájlfeltöltési állapotot. Adjon meg egy isSuccess
true
értéket, amikor a fájlfeltöltés sikeres volt, false
ha nem.
FileUploadCompletionNotification
akkor is meghívni kell, ha a fájlfeltöltés sikertelen. Az IoT Hub rögzített számú SAS URI-val rendelkezik, amely bármikor aktív lehet. Miután végzett a fájlfeltöltéssel, szabadítsd fel az SAS URI-t, hogy más SAS URI-k is létre tudjanak hozni. Ha egy SAS URI-t nem szabadít fel ezen az API-n keresztül, akkor végül felszabadítja magát attól függően, hogy a SAS URI-k mennyi ideig vannak konfigurálva az IoT Hubon való élethez.
Ez a példa sikeres állapotot ad át.
FileUploadCompletionNotification completionNotification = new FileUploadCompletionNotification(sasUriResponse.getCorrelationId(), true);
client.completeFileUpload(completionNotification);
Az ügyfél bezárása
Szabadítsd fel az client
erőforrásokat.
client.closeNow();
Háttéralkalmazás létrehozása
Ez a szakasz azt ismerteti, hogyan kaphat fájlfeltöltési értesítést egy háttéralkalmazásban.
A ServiceClient osztály olyan metódusokat tartalmaz, amelyekkel a szolgáltatások fájlfeltöltési értesítéseket fogadhatnak.
Importálási utasítások hozzáadása
Adja hozzá ezeket az importálási utasításokat az Azure IoT Java SDK és a kivételkezelő használatához.
import com.microsoft.azure.sdk.iot.service.*;
import java.io.IOException;
import java.net.URISyntaxException;
Csatlakozás az IoT Hubhoz
Háttérszolgáltatást az alábbi módszerekkel csatlakoztathat az IoT Hubhoz:
- Megosztott hozzáférési szabályzat
- Microsoft Entra
Fontos
Ez a cikk a szolgáltatáshoz való csatlakozás lépéseit tartalmazza közös hozzáférésű jogosultságkód használatával. Ez a hitelesítési módszer a teszteléshez és a kiértékeléshez kényelmes, de biztonságosabb módszer a Microsoft Entra-azonosítóval vagy felügyelt identitásokkal történő hitelesítés egy szolgáltatáshoz. További információkért tekintse meg a felhőbiztonság ajánlott biztonsági eljárásait>.
Csatlakozás megosztott hozzáférési szabályzattal
A kapcsolati protokoll definiálása
Az IotHubServiceClientProtocol használatával definiálhatja a szolgáltatásügyfél által az IoT Hubbal való kommunikációhoz használt alkalmazásréteg protokollt.
IotHubServiceClientProtocol
csak az enumerálást AMQPS
AMQPS_WS
fogadja el.
private static final IotHubServiceClientProtocol protocol =
IotHubServiceClientProtocol.AMQPS;
A ServiceClient objektum létrehozása
Hozza létre a ServiceClient objektumot, amely biztosítja az Iot Hub kapcsolati sztring és a protokollt.
Ha egy eszközön szeretne fájlt feltölteni az IoT Hubra, a szolgáltatásnak szüksége van a szolgáltatás csatlakoztatási engedélyére. Alapértelmezés szerint minden IoT Hub egy megosztott hozzáférési szabályzattal jön létre, amely ezt az engedélyt biztosítja.
A konstruktor paramétereként ServiceClient
adja meg a szolgáltatás megosztott hozzáférési szabályzatát. A megosztott hozzáférési szabályzatokról további információt az IoT Hub hozzáférésének szabályozása közös hozzáférésű jogosultságkódokkal című témakörben talál.
String iotHubConnectionString = "HostName=xxxxx.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxx";
private static final ServiceClient serviceClient (iotHubConnectionString, protocol);
Az alkalmazás és az IoT Hub közötti kapcsolat megnyitása
Nyissa meg az AMQP-küldő kapcsolatot. Ez a módszer létrehozza az alkalmazás és az IoT Hub közötti kapcsolatot.
serviceClient.open();
Csatlakozás a Microsoft Entra használatával
A Microsoft Entrát használó háttéralkalmazásnak sikeresen hitelesítenie kell és be kell szereznie egy biztonsági jogkivonat hitelesítő adatait, mielőtt csatlakozik az IoT Hubhoz. Ez a jogkivonat egy IoT Hub-kapcsolati metódusnak lesz átadva. A Microsoft Entra for IoT Hub beállításával és használatával kapcsolatos általános információkért tekintse meg az IoT Hubhoz való hozzáférés Szabályozása a Microsoft Entra ID használatával című témakört.
A Java SDK-hitelesítés áttekintéséhez tekintse meg a Java és az Azure Identity használatával történő Azure-hitelesítést.
Az egyszerűség kedvéért ez a szakasz az ügyféltitkos hitelesítés leírására összpontosít.
A Microsoft Entra alkalmazás konfigurálása
Be kell állítania egy Microsoft Entra-alkalmazást, amely az előnyben részesített hitelesítési hitelesítő adatokhoz van konfigurálva. Az alkalmazás olyan paramétereket tartalmaz, mint az ügyfélkulcs, amelyeket a háttéralkalmazás használ a hitelesítéshez. Az elérhető alkalmazáshitelesítési konfigurációk a következők:
- Titkos ügyfélkód
- Tanúsítvány
- Összevont identitás hitelesítő adatai
A Microsoft Entra-alkalmazások adott szerepkör-engedélyeket igényelhetnek a végrehajtott műveletektől függően. Az IoT Hub ikerpéldány-közreműködője például az IoT Hub-eszközökhöz és modulikrekhez való olvasási és írási hozzáférés engedélyezéséhez szükséges. További információ: IoT Hub-hozzáférés kezelése Azure RBAC-szerepkör-hozzárendeléssel.
A Microsoft Entra-alkalmazások beállításáról további információt a rövid útmutatóban talál: Alkalmazás regisztrálása a Microsoft Identitásplatform.
Hitelesítés DefaultAzureCredential használatával
A Microsoft Entra segítségével a legegyszerűbben a DefaultAzureCredential használatával hitelesíthet egy háttéralkalmazást, de ajánlott egy másik módszert használni egy éles környezetben, beleértve egy adott TokenCredential
vagy pared-down ChainedTokenCredential
metódust is.
A használat DefaultAzureCredential
előnyeiről és hátrányairól további információt a Java Azure Identity ügyfélkódtárában található Hitelesítőadat-láncok című témakörben talál.
A DefaultAzureCredential különböző hitelesítési mechanizmusokat támogat, és meghatározza a megfelelő hitelesítőadat-típust a környezet alapján, amelyben végrehajtja. Több hitelesítő adattípust próbál meg egy sorrendben használni, amíg nem talál egy működő hitelesítő adatot.
A Microsoft Entra alkalmazás hitelesítő adatait a DefaultAzureCredentialBuilder használatával hitelesítheti. Mentse a kapcsolati paramétereket, például az ügyfél titkos bérlőazonosítóját, az ügyfélazonosítót és az ügyfél titkos kódértékeit környezeti változóként. A létrehozás után adja át a TokenCredential
ServiceClientnek vagy más szerkesztőnek hitelesítőadat-paraméterként.
Ebben a példában DefaultAzureCredentialBuilder
megpróbál hitelesíteni egy kapcsolatot a DefaultAzureCredential szakaszban leírt listából. A sikeres Microsoft Entra-hitelesítés eredménye egy biztonsági jogkivonat hitelesítő adatai, amelyet a rendszer átad egy konstruktornak, például a ServiceClientnek.
TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();
Hitelesítés a ClientSecretCredentialBuilder használatával
A ClientSecretCredentialBuilder használatával létrehozhat egy hitelesítő adatot az ügyfél titkos adataival. Ha sikeres, ez a metódus egy TokenCredential értéket ad vissza, amely átadható a ServiceClientnek vagy más szerkesztőnek hitelesítőadat-paraméterként.
Ebben a példában a Microsoft Entra alkalmazásregisztrációs ügyfél titkos kódját, ügyfél-azonosítóját és bérlőazonosító-értékeit hozzáadtuk a környezeti változókhoz. Ezeket a környezeti változókat a hitelesítő adatok létrehozásához használják ClientSecretCredentialBuilder
.
string clientSecretValue = System.getenv("AZURE_CLIENT_SECRET");
string clientID = System.getenv("AZURE_CLIENT_ID");
string tenantID = System.getenv("AZURE_TENANT_ID");
TokenCredential credential =
new ClientSecretCredentialBuilder()
.tenantId(tenantID)
.clientId(clientID)
.clientSecret(clientSecretValue)
.build();
Egyéb hitelesítési osztályok
A Java SDK az alábbi osztályokat is tartalmazza, amelyek egy háttéralkalmazást hitelesítenek a Microsoft Entra használatával:
- AuthorizationCodeCredential
- AzureCliCredential
- AzureDeveloperCliCredential
- AzurePipelinesCredential
- ChainedTokenCredential
- ClientAssertionCredential
- ClientCertificateCredential
- DeviceCodeCredential
- EnvironmentCredential
- InteractiveBrowserCredential
- ManagedIdentityCredential
- OnBehalfOfCredential
Kódminták
A Microsoft Entra szolgáltatáshitelesítés működő mintáiért lásd a szerepköralapú hitelesítési mintát.
Fájlfeltöltés állapotának ellenőrzése
A fájlfeltöltés állapotának ellenőrzése:
- Hozzon létre egy getFileUploadNotificationReceiver objektumot.
- Az Open használatával csatlakozhat az IoT Hubhoz.
- Hívás fogadása a fájlfeltöltés állapotának ellenőrzéséhez. Ez a metódus egy fileUploadNotification objektumot ad vissza. Ha feltöltési értesítés érkezik, megtekintheti a feltöltési állapotmezőket a fileUploadNotification metódusokkal.
Példa:
FileUploadNotificationReceiver receiver = serviceClient.getFileUploadNotificationReceiver();
receiver.open();
FileUploadNotification fileUploadNotification = receiver.receive(2000);
if (fileUploadNotification != null)
{
System.out.println("File Upload notification received");
System.out.println("Device Id : " + fileUploadNotification.getDeviceId());
System.out.println("Blob Uri: " + fileUploadNotification.getBlobUri());
System.out.println("Blob Name: " + fileUploadNotification.getBlobName());
System.out.println("Last Updated : " + fileUploadNotification.getLastUpdatedTimeDate());
System.out.println("Blob Size (Bytes): " + fileUploadNotification.getBlobSizeInBytes());
System.out.println("Enqueued Time: " + fileUploadNotification.getEnqueuedTimeUtcDate());
}
else
{
System.out.println("No file upload notification");
}
// Close the receiver object
receiver.close();
SDK-fájlfeltöltési minták
Két Java-fájlfeltöltési minta van.
Csomagok telepítése
Az azure-iot-device kódtárat telepíteni kell, mielőtt bármilyen kapcsolódó kódot meghívna.
pip install azure-iot-device
A rendszer az azure.storage.blob csomagot használja a fájlfeltöltés végrehajtásához.
pip install azure.storage.blob
Fájl feltöltése eszközalkalmazásból
Ez a szakasz azt ismerteti, hogyan tölthet fel fájlokat egy eszközről egy IoT Hubra az Azure IoT SDK for Python IoT SDK IoTHubDeviceClient osztályával.
Kódtárak importálása
import os
from azure.iot.device import IoTHubDeviceClient
from azure.core.exceptions import AzureError
from azure.storage.blob import BlobClient
Eszköz csatlakoztatása az IoT Hubhoz
Az eszközalkalmazások az alábbi módszerekkel végezhetnek hitelesítést az IoT Hubon:
- X.509-tanúsítvány
- Megosztott hozzáférési kulcs
Hitelesítés X.509-tanúsítvánnyal
Eszköz csatlakoztatása az IoT Hubhoz X.509-tanúsítvány használatával:
- Az X.509-tanúsítványparaméterek hozzáadása a create_from_x509_certificate használatával
- Csatlakozás hívása az eszközügyfél csatlakoztatásához
Ez a példa a tanúsítvány bemeneti paraméterértékeit mutatja be helyi változóként az egyértelműség érdekében. Éles rendszerben a bizalmas bemeneti paramétereket környezeti változókban vagy más biztonságosabb tárolási helyen tárolhatja. Például a gazdagépnév környezeti változójának olvasására használható os.getenv("HOSTNAME")
.
# The Azure IoT hub name
hostname = "xxxxx.azure-devices.net"
# The device that has been created on the portal using X509 CA signing or self-signing capabilities
device_id = "MyDevice"
# The X.509 certificate file name
cert_file = "~/certificates/certs/sensor-thl-001-device.cert.pfx"
key_file = "~/certificates/certs/sensor-thl-001-device.cert.key"
# The optional certificate pass phrase
pass_phrase = "1234"
x509 = X509(
cert_file,
key_file,
pass_phrase,
)
# The client object is used to interact with your Azure IoT hub.
device_client = IoTHubDeviceClient.create_from_x509_certificate(
hostname=hostname, device_id=device_id, x509=x509
)
# Connect to IoT Hub
await device_client.connect()
További információ a tanúsítványhitelesítésről:
- Identitások hitelesítése X.509-tanúsítványokkal
- Oktatóanyag: Tanúsítványok létrehozása és feltöltése teszteléshez
Kódminták
Az X.509-tanúsítványhitelesítés működő mintáit az Async Hub-forgatókönyvekben az x509-ben végződő fájlnevek példáiban tekinti meg.
Hitelesítés megosztott hozzáférési kulccsal
Eszköz csatlakoztatása az IoT Hubhoz:
- Hívja meg create_from_connection_string az eszköz elsődleges kapcsolati sztring hozzáadásához.
- Csatlakozás hívása az eszközügyfél csatlakoztatásához.
Példa:
# Add your IoT hub primary connection string
CONNECTION_STRING = "{Device primary connection string}"
device_client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)
# Connect the client
device_client.connect()
Blob Storage-információk lekérése
Hívja meg a get_storage_info_for_blob , hogy információt kapjon egy IoT Hubról egy csatolt Azure Storage-fiókról. Ezek az információk tartalmazzák a gazdagép nevét, a tároló nevét, a blobnevet és egy SAS-jogkivonatot. A get_storage_info_for_blob
metódus egy , a metódusban notify_blob_upload_status
használt értéket is visszaadcorrelation_id
. Az correlation_id
IoT Hub így jelöli meg, hogy melyik Blobon dolgozik.
# Get the storage info for the blob
PATH_TO_FILE = "{Full path to local file}"
blob_name = os.path.basename(PATH_TO_FILE)
blob_info = device_client.get_storage_info_for_blob(blob_name)
Fájl feltöltése a Blob Storage-ba
Fájl feltöltése a Blob Storage-ba:
- Blob URL-címből from_blob_url hozhat létre BlobClient-objektumot.
- Hívja meg upload_blob , hogy töltse fel a fájlt a Blob Storage-ba.
Ez a példa egy BlobClient inicializálásához használt URL-cím létrehozásához elemzi a blob_info
struktúrát. Ezután meghívja upload_blob
, hogy töltse fel a fájlt a Blob Storage-ba.
try:
sas_url = "https://{}/{}/{}{}".format(
blob_info["hostName"],
blob_info["containerName"],
blob_info["blobName"],
blob_info["sasToken"]
)
print("\nUploading file: {} to Azure Storage as blob: {} in container {}\n".format(file_name, blob_info["blobName"], blob_info["containerName"]))
# Upload the specified file
with BlobClient.from_blob_url(sas_url) as blob_client:
with open(file_name, "rb") as f:
result = blob_client.upload_blob(f, overwrite=True)
return (True, result)
except FileNotFoundError as ex:
# catch file not found and add an HTTP status code to return in notification to IoT hub
ex.status_code = 404
return (False, ex)
except AzureError as ex:
# catch Azure errors that might result from the upload operation
return (False, ex)
Az IoT Hub értesítése a feltöltés állapotáról
A notify_blob_upload_status használatával értesítheti az IoT Hubot a Blob Storage-művelet állapotáról. Adja át a correlation_id
módszerrel kapott get_storage_info_for_blob
eredményt. Az correlation_id
IoT Hub arra használja, hogy értesítést küldjön minden olyan szolgáltatásnak, amely figyelheti a fájlfeltöltési feladat állapotáról szóló értesítést.
Ez a példa értesíti a sikeres fájlfeltöltés IoT Hubját:
device_client.notify_blob_upload_status(storage_info["correlationId"], True, 200, "OK: {}".format(PATH_TO_FILE)
Az eszközügyfél leállítása
Állítsa le az ügyfelet. A metódus meghívása után a további ügyfélhívások megkísérlése a ClientError indítását eredményezi.
device_client.shutdown()
SDK-fájlfeltöltési minták
Az SDK két fájlfeltöltési mintát tartalmaz:
Áttekintés
Ez a cikk azt ismerteti, hogyan használhatja az Azure IoT SDK-t Node.js eszközalkalmazás létrehozásához egy fájl feltöltéséhez, és hogyan kaphat fájlfeltöltési értesítést a háttérszolgáltatás-alkalmazásról.
Eszközalkalmazás létrehozása
Ez a szakasz azt ismerteti, hogyan tölthet fel fájlokat egy eszközről egy IoT Hubra az Azure IoT SDK azure-iot-device csomagjával Node.js.
SDK-csomagok telepítése
Futtassa ezt a parancsot az azure-iot-device SDK, az azure-iot-device-mqtt és a @azure/storage-blobcsomagok telepítéséhez a fejlesztői gépen:
npm install azure-iot-device azure-iot-device-mqtt @azure/storage-blob --save
Az azure-iot-device csomag olyan objektumokat tartalmaz, amelyek IoT-eszközökhöz illesztenek.
Ezt az eljárást követve feltölthet egy fájlt egy eszközről az IoT Hubra:
- Az eszköz csatlakoztatása az IoT Hubhoz
- Blob megosztott hozzáférésű jogosultságkód (SAS) jogkivonat lekérése az IoT Hubról
- A fájl feltöltése az Azure Storage-ba
- Fájlfeltöltés állapotáról szóló értesítés küldése az IoT Hubnak
Modulok létrehozása
Hozzon létre ügyfél-, protokoll-, hiba- és elérésiút-modulokat a telepített csomagok használatával.
const Protocol = require('azure-iot-device-mqtt').Mqtt;
const errors = require('azure-iot-common').errors;
const path = require('path');
Eszköz csatlakoztatása az IoT Hubhoz
Az eszközalkalmazások az alábbi módszerekkel végezhetnek hitelesítést az IoT Hubon:
- X.509-tanúsítvány
- Megosztott hozzáférési kulcs
Hitelesítés X.509-tanúsítvánnyal
Az X.509-tanúsítvány az eszköz–IoT Hub kapcsolatátvitelhez van csatolva.
Eszköz–IoT Hub kapcsolat konfigurálása X.509-tanúsítvány használatával:
AConnectionString hívásával adja hozzá az eszköz- vagy identitásmodul kapcsolati sztring, és adja hozzá az
Client
objektum átviteli típusát. Adja hozzáx509=true
a kapcsolati sztring, hogy jelezze, hogy a rendszer tanúsítványt ad hozzáDeviceClientOptions
. Példa:Eszköz kapcsolati sztring:
HostName=xxxxx.azure-devices.net;DeviceId=Device-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true
Identitásmodul kapcsolati sztring:
HostName=xxxxx.azure-devices.net;DeviceId=Device-1;ModuleId=Module-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true
Konfiguráljon egy JSON-változót tanúsítványadatokkal, és adja át a DeviceClientOptionsnak.
Hívja meg a setOptionst , hogy adjon hozzá egy X.509-tanúsítványt és kulcsot (és opcionálisan jelszót) az ügyfélátvitelhez.
Nyissa meg a hívást az eszköz és az IoT Hub közötti kapcsolat megnyitásához.
Ez a példa egy JSON-változó tanúsítványkonfigurációs adatait mutatja be. A rendszer átadja a tanúsítványkonfigurációt clientOptions
setOptions
, és a kapcsolat a következő használatával open
nyílik meg: .
const Client = require('azure-iot-device').Client;
const Protocol = require('azure-iot-device-mqtt').Mqtt;
// Connection string illustrated for demonstration only. Never hard-code the connection string in production. Instead use an environmental variable or other secure storage.
const connectionString = `HostName=xxxxx.azure-devices.net;DeviceId=Device-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true`
const client = Client.fromConnectionString(connectionString, Protocol);
var clientOptions = {
cert: myX509Certificate,
key: myX509Key,
passphrase: passphrase,
http: {
receivePolicy: {
interval: 10
}
}
}
client.setOptions(clientOptions);
client.open(connectCallback);
További információ a tanúsítványhitelesítésről:
- Identitások hitelesítése X.509-tanúsítványokkal
- Tanúsítványok létrehozása és feltöltése teszteléshez
Kódminta
Az X.509-tanúsítványhitelesítés működő mintájáért tekintse meg az X.509 egyszerű mintaeszközt.
Hitelesítés megosztott hozzáférési kulccsal
Átviteli protokoll kiválasztása
Az Client
objektum a következő protokollokat támogatja:
Amqp
-
Http
- HasználatHttp
esetén a példány ritkán (legalább 25 percenként) ellenőrzi azClient
IoT Hubtól érkező üzeneteket. Mqtt
MqttWs
AmqpWs
Telepítse a szükséges átviteli protokollokat a fejlesztői gépen.
Ez a parancs például telepíti a protokollt Amqp
:
npm install azure-iot-device-amqp --save
Az MQTT, az AMQP és a HTTPS-támogatás közötti különbségekről további információt a felhőalapú kommunikációs útmutatóban és a Kommunikációs protokoll kiválasztása című témakörben talál.
Ügyfélobjektum létrehozása
Hozzon létre egy objektumot Client
a telepített csomag használatával.
Példa:
const Client = require('azure-iot-device').Client;
Protokollobjektum létrehozása
Objektum létrehozása Protocol
telepített átviteli csomag használatával.
Ez a példa az AMQP protokollt rendeli hozzá:
const Protocol = require('azure-iot-device-amqp').Amqp;
Az eszköz kapcsolati sztring és átviteli protokolljának hozzáadása
Hívás aConnectionStringtől az eszközkapcsolati paraméterek megadásához:
- connStr – Az eszköz kapcsolati sztring.
- transportCtor – A szállítási protokoll.
Ez a példa az átviteli protokollt Amqp
használja:
const deviceConnectionString = "{IoT hub device connection string}"
const Protocol = require('azure-iot-device-mqtt').Amqp;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);
Az IoT Hubhoz való kapcsolat megnyitása
Az IoT-eszköz és az IoT Hub közötti kapcsolat megnyitásához használja a nyitott metódust.
Példa:
client.open(function(err) {
if (err) {
console.error('error connecting to hub: ' + err);
process.exit(1);
}
})
SAS-jogkivonat lekérése az IoT Hubról
A getBlobSharedAccessSignature használatával kérje le a társított tárfiók SAS-jogkivonatát az IoT Hubról.
Példa:
// make sure you set these environment variables prior to running the sample.
const localFilePath = process.env.PATH_TO_FILE;
const storageBlobName = path.basename(localFilePath);
const blobInfo = await client.getBlobSharedAccessSignature(storageBlobName);
if (!blobInfo) {
throw new errors.ArgumentError('Invalid upload parameters');
}
A fájl feltöltése az IoT Hubra
Fájl feltöltése eszközről az IoT Hubra:
- Streamfolyamat létrehozása
- A blob URL-címének létrehozása
- BlockBlobClient létrehozása a Blob Storage-ba való fájlfeltöltéshez
- Az uploadFile meghívása a fájl Blob Storage-ba való feltöltéséhez
- Hívja meg a notifyBlobUploadStatus parancsot, hogy értesítse az IoT Hubot arról, hogy a feltöltés sikeres vagy sikertelen volt
Példa:
// Open the pipeline
const pipeline = newPipeline(new AnonymousCredential(), {
retryOptions: { maxTries: 4 },
telemetry: { value: 'HighLevelSample V1.0.0' }, // Customized telemetry string
keepAliveOptions: { enable: false }
});
// Construct the blob URL
const { hostName, containerName, blobName, sasToken } = blobInfo;
const blobUrl = `https://${hostName}/${containerName}/${blobName}${sasToken}`;
// Create the BlockBlobClient for file upload to Blob Storage
const blobClient = new BlockBlobClient(blobUrl, pipeline);
// Setup blank status notification arguments to be filled in on success/failure
let isSuccess;
let statusCode;
let statusDescription;
const uploadStatus = await blobClient.uploadFile(localFilePath);
console.log('uploadStreamToBlockBlob success');
try {
const uploadStatus = await blobClient.uploadFile(localFilePath);
console.log('uploadStreamToBlockBlob success');
// Save successful status notification arguments
isSuccess = true;
statusCode = uploadStatus._response.status;
statusDescription = uploadStatus._response.bodyAsText;
// Notify IoT hub of upload to blob status (success)
console.log('notifyBlobUploadStatus success');
}
catch (err) {
isSuccess = false;
statusCode = err.code;
statusDescription = err.message;
console.log('notifyBlobUploadStatus failed');
console.log(err);
}
// Send file upload status notification to IoT hub
await client.notifyBlobUploadStatus(blobInfo.correlationId, isSuccess, statusCode, statusDescription);
A helyi fájl feltöltése blobtárolóba
Helyi fájlt feltölthet a blobtárolóba egy számítógépről
const deviceClient = Client.fromConnectionString(deviceConnectionString, Protocol);
uploadToBlob(localFilePath, deviceClient)
.catch((err) => {
console.log(err);
})
.finally(() => {
process.exit();
});
SDK-fájlfeltöltési minta
Az SDK tartalmaz egy feltöltést a blob speciális mintájára.
Háttéralkalmazás létrehozása
Ez a szakasz azt ismerteti, hogyan fogadhat fájlfeltöltési értesítéseket egy háttéralkalmazásban.
A ServiceClient osztály olyan metódusokat tartalmaz, amelyekkel a szolgáltatások fájlfeltöltési értesítéseket fogadhatnak.
Szolgáltatás SDK-csomag telepítése
Futtassa ezt a parancsot az Azure-iotHub fejlesztői gépen való telepítéséhez:
npm install azure-iothub --save
Csatlakozás az IoT Hubhoz
Háttérszolgáltatást az alábbi módszerekkel csatlakoztathat az IoT Hubhoz:
- Megosztott hozzáférési szabályzat
- Microsoft Entra
Fontos
Ez a cikk a szolgáltatáshoz való csatlakozás lépéseit tartalmazza közös hozzáférésű jogosultságkód használatával. Ez a hitelesítési módszer a teszteléshez és a kiértékeléshez kényelmes, de biztonságosabb módszer a Microsoft Entra-azonosítóval vagy felügyelt identitásokkal történő hitelesítés egy szolgáltatáshoz. További információkért tekintse meg a felhőbiztonság ajánlott biztonsági eljárásait>.
Csatlakozás megosztott hozzáférési szabályzattal
A fromConnectionString használatával csatlakozhat az IoT Hubhoz.
Ha egy fájlt szeretne feltölteni egy eszközről, a szolgáltatásnak a szolgáltatás csatlakoztatási engedélyére van szüksége. Alapértelmezés szerint minden IoT Hub egy megosztott hozzáférési szabályzattal jön létre, amely ezt az engedélyt biztosítja.
Paraméterként CreateFromConnectionString
adja meg a szolgáltatás megosztott hozzáférési szabályzatát kapcsolati sztring. A megosztott hozzáférési szabályzatokról további információt az IoT Hub hozzáférésének szabályozása közös hozzáférésű jogosultságkódokkal című témakörben talál.
var Client = require('azure-iothub').Client;
var connectionString = '{IoT hub shared access policy connection string}';
var client = Client.fromConnectionString(connectionString);
Csatlakozás a Microsoft Entra használatával
A Microsoft Entrát használó háttéralkalmazásnak sikeresen hitelesítenie kell és be kell szereznie egy biztonsági jogkivonat hitelesítő adatait, mielőtt csatlakozik az IoT Hubhoz. Ez a jogkivonat egy IoT Hub-kapcsolati metódusnak lesz átadva. A Microsoft Entra for IoT Hub beállításával és használatával kapcsolatos általános információkért tekintse meg az IoT Hubhoz való hozzáférés Szabályozása a Microsoft Entra ID használatával című témakört.
Az SDK-hitelesítés Node.js áttekintése:
A Microsoft Entra alkalmazás konfigurálása
Be kell állítania egy Microsoft Entra-alkalmazást, amely az előnyben részesített hitelesítési hitelesítő adatokhoz van konfigurálva. Az alkalmazás olyan paramétereket tartalmaz, mint az ügyfélkulcs, amelyeket a háttéralkalmazás használ a hitelesítéshez. Az elérhető alkalmazáshitelesítési konfigurációk a következők:
- Titkos ügyfélkód
- Tanúsítvány
- Összevont identitás hitelesítő adatai
A Microsoft Entra-alkalmazások adott szerepkör-engedélyeket igényelhetnek a végrehajtott műveletektől függően. Az IoT Hub ikerpéldány-közreműködője például az IoT Hub-eszközökhöz és modulikrekhez való olvasási és írási hozzáférés engedélyezéséhez szükséges. További információ: IoT Hub-hozzáférés kezelése Azure RBAC-szerepkör-hozzárendeléssel.
A Microsoft Entra-alkalmazások beállításáról további információt a rövid útmutatóban talál: Alkalmazás regisztrálása a Microsoft Identitásplatform.
Hitelesítés DefaultAzureCredential használatával
A Microsoft Entra segítségével a legegyszerűbben a DefaultAzureCredential használatával hitelesíthet egy háttéralkalmazást, de ajánlott egy másik módszert használni egy éles környezetben, beleértve egy adott TokenCredential
vagy pared-down ChainedTokenCredential
metódust is. Az egyszerűség kedvéért ez a szakasz a hitelesítést és az ügyfél titkos kódjának használatát DefaultAzureCredential
ismerteti.
A használat DefaultAzureCredential
előnyeiről és hátrányairól további információt a JavaScripthez készült Azure Identity ügyfélkódtár hitelesítőadat-láncai című témakörben talál .
A DefaultAzureCredential különböző hitelesítési mechanizmusokat támogat, és meghatározza a megfelelő hitelesítőadat-típust a környezet alapján, amelyben végrehajtja. Több hitelesítő adattípust próbál meg egy sorrendben használni, amíg nem talál egy működő hitelesítő adatot.
A Microsoft Entra a következő csomagot igényli:
npm install --save @azure/identity
Ebben a példában a Microsoft Entra alkalmazásregisztrációs ügyfél titkos kódját, ügyfél-azonosítóját és bérlőazonosítóját hozzáadtuk a környezeti változókhoz. Ezek a környezeti változók az DefaultAzureCredential
alkalmazás hitelesítésére szolgálnak. A sikeres Microsoft Entra-hitelesítés eredménye egy biztonsági jogkivonat hitelesítő adatai, amelyet egy IoT Hub-kapcsolati módszernek ad át.
import { DefaultAzureCredential } from "@azure/identity";
// Azure SDK clients accept the credential as a parameter
const credential = new DefaultAzureCredential();
Az eredményül kapott hitelesítő jogkivonat ezután átadható a FromTokenCredential-nak , hogy csatlakozzon az IoT Hubhoz minden olyan SDK-ügyfélhez, amely elfogadja a Microsoft Entra hitelesítő adatait:
fromTokenCredential
két paramétert igényel:
- Az Azure-szolgáltatás URL-címe – Az Azure-szolgáltatás URL-címének előtag nélküli
https://
formátumban{Your Entra domain URL}.azure-devices.net
kell lennie. Például:MyAzureDomain.azure-devices.net
. - Az Azure hitelesítőadat-jogkivonata
Ebben a példában az Azure-hitelesítő adatokat a rendszer a használatával szerzi be DefaultAzureCredential
. A rendszer ezután az Azure-tartomány URL-címét és hitelesítő adatait adja meg Registry.fromTokenCredential
az IoT Hubhoz való kapcsolat létrehozásához.
const { DefaultAzureCredential } = require("@azure/identity");
let Registry = require('azure-iothub').Registry;
// Define the client secret values
clientSecretValue = 'xxxxxxxxxxxxxxx'
clientID = 'xxxxxxxxxxxxxx'
tenantID = 'xxxxxxxxxxxxx'
// Set environment variables
process.env['AZURE_CLIENT_SECRET'] = clientSecretValue;
process.env['AZURE_CLIENT_ID'] = clientID;
process.env['AZURE_TENANT_ID'] = tenantID;
// Acquire a credential object
const credential = new DefaultAzureCredential()
// Create an instance of the IoTHub registry
hostName = 'MyAzureDomain.azure-devices.net';
let registry = Registry.fromTokenCredential(hostName,credential);
Kódminták
A Microsoft Entra szolgáltatáshitelesítés működő mintáit az Azure-identitásra vonatkozó példákban talál.
Fájlfeltöltési értesítés visszahívási fogadó létrehozása
Fájlfeltöltési értesítés visszahívási fogadó létrehozása:
- Hívja meg a getFileNotificationReceiver parancsot. Adja meg annak a fájlfeltöltési visszahívási metódusnak a nevét, amely az értesítési üzenetek fogadásakor lesz meghívva.
- Fájlfeltöltési értesítések feldolgozása a visszahívási módszerben.
Ez a példa beállít egy értesítési visszahívási fogadót receiveFileUploadNotification
. A fogadó értelmezi a fájlfeltöltés állapotadatait, és állapotüzenetet nyomtat ki a konzolra.
//Set up the receiveFileUploadNotification notification message callback receiver
serviceClient.getFileNotificationReceiver(function receiveFileUploadNotification(err, receiver){
if (err) {
console.error('error getting the file notification receiver: ' + err.toString());
} else {
receiver.on('message', function (msg) {
console.log('File upload from device:')
console.log(msg.getData().toString('utf-8'));
receiver.complete(msg, function (err) {
if (err) {
console.error('Could not finish the upload: ' + err.message);
} else {
console.log('Upload complete');
}
});
});
}