Gyakorlat – Az Azure-tároló hozzáférésének delegálása közös hozzáférésű jogosultságkódokkal
Az Azure Storage lehetővé teszi a megosztott kulccsal, közös hozzáférésű jogosultságkóddal (SAS) vagy Microsoft Entra-azonosítóval rendelkező fájlokhoz való hozzáférést. SAS-ekkel megszabhatja, hogy az ügyfelek milyen műveleteket végezhetnek a fájlokkal és mennyi ideig.
A cége képdiagnosztikai rendszere belsőleg, egy megosztott kulccsal éri el a betegképeket. Létre kell hoznia egy API-t, amely lehetővé teszi a harmadik felek számára a diagnosztikai képekhez való hozzáférést. Egy tesztlapot hoz létre a webalkalmazásban, amelyből megtudhatja, hogyan segíthet az SAS a külső ügyfelek biztonságos hozzáférésének biztosításában.
Ebben a gyakorlatban létrehoz egy tárfiókot, és feltölt néhány példa betegképet. Üzembe helyezheti a csapat meglévő webalkalmazását, és tesztelheti, hogy hozzáfér-e a tárterülethez. Az utolsó lépésként hozzáadja a C#- és JavaScript-kódot, amellyel létrehozza igény szerint a képek biztonságos megtekintéséhez szükséges SAS-jogkivonatot.
Tárfiók létrehozása és képek feltöltése
Az Azure Cloud Shell használatával adja meg a következő kódot a betegképek tárfiókjának létrehozásához. A kód létrehoz egy tárfióknevet.
export STORAGENAME=medicalrecords$RANDOM az storage account create \ --name $STORAGENAME \ --access-tier hot \ --kind StorageV2 \ --resource-group "<rgn>[sandbox resource group name]</rgn>"
Hozzon létre egy tárolót a tárfiókban a rendszerképek tárolásához.
az storage container create \ --name patient-images \ --account-name $STORAGENAME \ --public-access off
Klónozza a csapata meglévő webalkalmazását. Ez az adattár a csapat által a teszteléshez használt példaképeket tartalmazza.
git clone https://github.com/MicrosoftDocs/mslearn-control-access-to-azure-storage-with-sas.git sas
Az Azure CLI upload-batch parancsával töltse fel a rendszerképeket a tárfiókba.
az storage blob upload-batch \ --source sas \ --destination patient-images \ --account-name $STORAGENAME \ --pattern *.jpg
A betegdiagnosztikai képrendszer tesztelése
Nyissa meg az appsettings.json fájlt a kódszerkesztőben, hogy hozzáadhassuk a tárfiókhoz tartozó kapcsolati sztring.
code sas/appsettings.json
A Cloud Shellben írja be a következő kódot a tárfiók kapcsolati sztring beszerzéséhez.
az storage account show-connection-string --name $STORAGENAME
A válasznak ebben a formátumban kell megjelennie:
{ "connectionString": "DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=medicalrecords3215;AccountKey=UGLNuJWUBtodz+VbhhFcMwkzDpX49Wf7FxtuQDTOHhH+LpCtSQ2LBP0Ju8TQby5CeOt7DMYBgH45SX9yFwqPvA==" }
Másolja ki a connectionString értéket az idézőjelekkel együtt.
A kódszerkesztőben cserélje le a Csatlakozás ionString értéket
"[connection string]"
a másolt sztringre.Másolja ki a kapcsolati sztring törzsének értékét
AccountName=
.Cserélje le az AccountName paraméter értékét a másolt fióknévértékre.
Másolja ki a kapcsolati sztring törzsének értékét
AccountKey=
(ne tartalmazza az idézőjelet). Ügyeljen arra, hogy az==
érték végén szerepeljen.Cserélje le az AccountKey paraméter értékét a másolt fiókkulcs értékére.
Az appsettings.json fájlnak a következő kimenethez kell hasonlítania.
{ "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*", "StorageAccount": { "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=medicalrecords3215;AccountKey=UGLNuJWUBtodz+VbhhFcMwkzDpX49Wf7FxtuQDTOHhH+LpCtSQ2LBP0Ju8TQby5CeOt7DMYBgH45SX9yFwqPvA==;EndpointSuffix=core.windows.net", "Container" : "patient-images", "AccountName":"medicalrecords3215", "AccountKey":"UGLNuJWUBtodz+VbhhFcMwkzDpX49Wf7FxtuQDTOHhH+LpCtSQ2LBP0Ju8TQby5CeOt7DMYBgH45SX9yFwqPvA==" } }
Mentse és zárja be a kódszerkesztőt a Ctrl+S, majd a Ctrl+Q billentyűkombinációval.
Nyisson meg egy portot, hogy hozzáférhessen a webalkalmazáshoz, amikor a Cloud Shellben fut.
curl -X POST http://localhost:8888/openPort/8000;
Ez a parancs egy olyan helyre ad vissza,
url
ahol az alkalmazás elérhető.{"message":"Port 8000 is open","url":"https://gateway11.northeurope.console.azure.com/n/cc-4016c848/cc-4016c848/proxy/8000/"}
Futtassa az alkalmazást.
cd sas dotnet run
Az alkalmazás lefordításakor a Cloud Shell-konzol az alábbi példához hasonló adatokat jelenít meg.
Hosting environment: Development Content root path: /home/<yourusername>/sas Now listening on: https://localhost:8001 Now listening on: http://localhost:8000 Application started. Press Ctrl+C to shut down.
Egy böngészőben illessze be az előző cURL-parancs által visszaadott URL-címet. Ügyeljen rá, hogy a perjel (/) szerepeljen a cím végén.
Az URL-címnek a következő formátumban kell lennie:
https://gateway11.northeurope.console.azure.com/n/cc-4016c848/cc-4016c848/proxy/8000/
.Ha a rendszer kéri a bejelentkezést, frissítse a böngészőablakot. Megjelenik a Lamna Healthcare betegdiagnosztikai rendszer.
Válassza az Összes beteg lekérése lehetőséget a tárfiókban lévő összes kép listájának megtekintéséhez.
SAS létrehozása kód hozzáadásával
A Cloud Shellben állítsa le a webalkalmazást a Ctrl+C billentyűkombinációval.
Bővítsük a PatientRecordController osztályt, hogy létrehozzunk egy igény szerinti SAS-t, és visszajuttassuk a webalkalmazás elejére.
Írja be a következő kódot a PatientRecordController.cs fájl megnyitásához a kódszerkesztőben.
code Controllers/PatientRecordController.cs
Adja hozzá a következő kódot az osztály aljára a
GET PatientRecord/patient-nnnnnn
metódus alatt.// GET PatientRecord/patient-nnnnnn/secure [HttpGet("{Name}/{secure}")] public PatientRecord Get(string name, string flag) { BlobClient blob = _container.GetBlobClient(name); return new PatientRecord { name=blob.Name, imageURI=blob.Uri.AbsoluteUri, sasToken=GetBlobSas(blob) }; }
Ez a metódus visszaküldi a kért betegképet egy SAS-szel együtt, amellyel megnyitható.
Adjon hozzá egy metódust, amely létrehozza az SAS-t a blobhoz.
// Build a SAS token for the given blob private string GetBlobSas(BlobClient blob) { // Create a user SAS that only allows reading for a minute BlobSasBuilder sas = new BlobSasBuilder { BlobContainerName = blob.BlobContainerName, BlobName = blob.Name, Resource = "b", ExpiresOn = DateTimeOffset.UtcNow.AddMinutes(1) }; // Allow read access sas.SetPermissions(BlobSasPermissions.Read); // Use the shared key to access the blob var storageSharedKeyCredential = new StorageSharedKeyCredential( _iconfiguration.GetValue<string>("StorageAccount:AccountName"), _iconfiguration.GetValue<string>("StorageAccount:AccountKey") ); return '?' + sas.ToSasQueryParameters(storageSharedKeyCredential).ToString(); }
Ez a metódus az átadott
BlobClient
objektummal hoz létre egyBlobSasBuilder
olyan SAS-t, amely írásvédett, és egy percen belül lejár.Mentse a fájlt a Ctrl+S billentyűkombinációval, majd lépjen ki a szerkesztőből a Ctrl+Q billentyűkombinációval.
Kód hozzáadása az SAS használatához
Adjunk hozzá kódot a weblaphoz, hogy a rendszerkép sasát kérjük.
Írja be a következő parancsot a external.cshtml oldal szerkesztéséhez.
code Pages/external.cshtml
A fájl vége közelében, a kattintásfigyelőben
#btn-submit
módosítsa a vonalat a$.get
hozzáadáshoz+ '/secure'
:$('#btn-submit').click(function(){ $('#result').empty(); $.get('api/PatientRecords/' + $('#patientID').val() + '/secure', function (data) { var imageURL = data.imageURI + $('#sasKey').val(); $('#result').html('<img id="patientScan" class="alert alert-success" src="' + imageURL + '" alt="patient scan" onerror="this.classList.remove(\'alert-success\'); this.classList.add(\'alert-danger\')"//>'); }, 'json'); });
#btn-submit
A kattintásfigyelő függvény alatt, a fájl alján, a</script>
címke fölött adja hozzá a következő kódot:$('#btn-getKey').click(function(){ $.get('api/PatientRecords/' + $('#patientID').val() + '/secure', function (data) { $('#sasKey').val(data.sasToken); }, 'json'); });
Ez a jQuery-kód egy kattintásfigyelőt ad
btn-getKey
gombhoz. A kód egy Ajax-hívást intéz az adott képfájl új, biztonságos URL-címéhez. Amikor végbemegy, feltölti a kulcs beviteli mezőjét az SAS-szel.Mentse a módosításokat a Ctrl+S billentyűkombinációval, majd lépjen ki a szerkesztőből a Ctrl+Q billentyűkombinációval.
A módosítások tesztelése
Futtassa a frissített alkalmazást.
dotnet run
A böngészőben frissítse a webhely lapját. Válassza a Get all patients lehetőséget, majd másolja ki a képfájlnevek egyikét.
A weblap tetején található menüben válassza a Külső vállalatok lehetőséget.
Illessze be a fájlnevet a Patient image filename mezőbe.
Válassza a View scan lehetőséget. A betegvizsgálat képe nem érhető el, mert nem hozott létre SAS-t.
Megjegyzés:
Ha a böngészőben tekinti meg a konzolt, a webkiszolgáló egy 404-ben kapott hibaüzenetet fog látni.
Válassza a Kulcs lekérése lehetőséget, amely feltölti a Kulcs mezőt egy SAS-szel.
Válassza a View scan lehetőséget. A beteg diagnosztikai képének meg kell jelennie.
A böngészőben kattintson a jobb gombbal a képre, és másolja a ki annak címét.
Nyisson meg egy új böngészőlapot, illessze be a másolt kép címét a címsorba, és nyomja le az Enter billentyűt. Ha az SAS létrehozása óta több mint egy perc telt el, hibaüzenet jelenik meg. Ha kevesebb mint egy perc telt el, a képnek meg kell jelennie.
Megjegyzés:
Lehetséges, hogy frissítenie kell az oldalt.
<Error> <Code>AuthenticationFailed</Code> <Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly, including the signature. RequestId:03eda893-f01e-0028-2d73-c5c947000000 Time:2021-01-07T16:02:55.3752851Z</Message> <AuthenticationErrorDetail>Signed expiry time [Tue, 07 Jan 2021 16:02:00 GMT] must be after signed start time [Tue, 07 Jan 2021 16:02:55 GMT]</AuthenticationErrorDetail> </Error>
Megjegyzés:
Ha néhány böngészőből szeretné megtekinteni ezt a hibaüzenetet, előfordulhat, hogy meg kell nyitnia egy új böngészőablakot, amely nem gyorsítótárazza a rendszerképet.
A Cloud Shellben lépjen ki a webalkalmazásból a Ctrl+C billentyűkombinációval.