إنشاء SAS لتفويض مستخدم لكائن ثنائي كبير الحجم باستخدام .NET

يتيح لك توقيع الوصول المشترك (SAS) منح وصول محدود إلى الحاويات والكائنات الثنائية كبيرة الحجم في حساب التخزين الخاص بك. عند إنشاء توقيع الوصول المشترك، فإنك تحدد قيوده بما في ذلك موارد تخزين Azure التي يُسمح للعميل بالوصول إليها، وما هي الأذونات التي يمتلكها على تلك الموارد، ومدة صلاحية توقيع الوصول المشترك.

يتم عملية توقيع كل SAS بمفتاح. يمكنك توقيع SAS بإحدى طريقتين:

  • باستخدام مفتاح تم إنشاؤه باستخدام بيانات اعتماد Microsoft Entra. SAS الذي تم توقيعه باستخدام بيانات اعتماد Microsoft Entra هو SAS لتفويض المستخدم. يجب أن يتم تعيين دور Azure RBAC للعميل الذي يقوم بإنشاء تحويل مستخدم SAS والذي يتضمن الإجراء Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. لمعرفة المزيد، راجع إنشاء توقيعات الوصول المشترك لتفويض المستخدم.
  • باستخدام مفتاح حساب التخزين. يتم توقيع كل من توقيع الوصول المشترك للخدمة و توقيع الوصول المشترك للحساب باستخدام مفتاح حساب التخزين. يجب أن يكون للعميل الذي ينشئ خدمة SAS حق وصول مباشر إلى مفتاح الحساب أو أن يتم تعيين إذن Microsoft.Storage/storageAccounts/listkeys/action. لمعرفة المزيد، راجع إنشاء SAS خدمة أو إنشاء حساب SAS.

إشعار

يوفر توقيع الوصول المشترك لتفويض المستخدم أماناً فائقاً لتوقيع الوصول المشترك الموقع باستخدام مفتاح حساب التخزين. توصي Microsoft باستخدام توقيع الوصول المشترك لتفويض المستخدم عندما يكون ذلك ممكناً. لمعرفة المزيد من المعلومات حول مفاتيح SAS، راجع منح وصول محدود إلى البيانات باستخدام توقيعات الوصول المشتركة (SAS).

توضح هذه المقالة كيفية استخدام بيانات اعتماد Microsoft Entra لإنشاء SAS لتفويض مستخدم لكائن ثنائي كبير الحجم باستخدام مكتبة عميل Azure Storage ل .NET.

حول توقيع الوصول المشترك لتفويض مستخدم

قد يتم تأمين رمز SAS المميز للوصول إلى حاوية أو كائن ثنائي كبير الحجم باستخدام بيانات اعتماد Microsoft Entra أو مفتاح حساب. يسمى SAS المؤمن ببيانات اعتماد Microsoft Entra SAS لتفويض المستخدم، لأن الرمز المميز OAuth 2.0 المستخدم لتوقيع SAS مطلوب نيابة عن المستخدم.

توصي Microsoft باستخدام بيانات اعتماد Microsoft Entra عندما يكون ذلك ممكنا كأفضل ممارسة أمان، بدلا من استخدام مفتاح الحساب، والذي يمكن اختراقه بسهولة أكبر. عندما يتطلب تصميم التطبيق توقيعات وصول مشتركة، استخدم بيانات اعتماد Microsoft Entra لإنشاء توقيع الوصول المشترك لتفويض المستخدم للأمان الفائق. لمزيد من المعلومات حول توقيع الوصول المشترك لتفويض مستخدم، راجع إنشاء توقيع الوصول المشترك لتفويض مستخدم.

تنبيه

يمكن لأي عميل يمتلك توقيع وصول مشترك صالح الوصول إلى البيانات في حساب التخزين خاصتك كما هو مسموح به من توقيع الوصول المشترك. من المهم حماية توقيع الوصول المشترك من الاستخدام الضار أو غير المقصود. استخدم التقدير في توزيع توقيع الوصول المشترك، وضع خطة لإلغاء توقيع الوصول المشترك المُخترق.

للحصول على مزيد من المعلومات عن توقيعات الوصول المشارك، راجع منح الوصول المحدود إلى موارد Azure Storage باستخدام توقيعات الوصول المشاركة (SAS).

قم بتعيين أدوار Azure للوصول إلى البيانات

عندما يحاول أساس أمان Microsoft Entra الوصول إلى بيانات الكائن الثنائي كبير الحجم، يجب أن يكون لمدير الأمان هذا أذونات للمورد. سواء كان أساس الأمان هوية مدارة في Azure أو حساب مستخدم Microsoft Entra يقوم بتشغيل التعليمات البرمجية في بيئة التطوير، يجب تعيين دور Azure لكيان الأمان الذي يمنح الوصول إلى بيانات الكائن الثنائي كبير الحجم. لمزيد من المعلومات حول التحكم في الوصول استناداً إلى الدور Azure، راجع تعيين دور Azure للوصول إلى بيانات الكائن الثنائي كبير الحجم.

إعداد مشروعك

لاستخدام أمثلة التعليمات البرمجية في هذه المقالة، اتبع هذه الخطوات لإعداد مشروعك.

تثبيت الحزم

تثبيت الحزم التالية:

dotnet add package Azure.Identity
dotnet add package Azure.Storage.Blobs

إعداد تعليمة برمجية للتطبيق

أضِف توجيهات using التالية:

using Azure;
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
using Azure.Storage.Sas;

الحصول على بيانات اعتماد الرمز المميز المصادق عليها

للحصول على بيانات اعتماد رمز مميز يمكن أن تستخدمها التعليمات البرمجية الخاصة بك لتخويل الطلبات إلى Blob Storage، قم بإنشاء مثيل لفئة DefaultAzureCredential . لمزيد من المعلومات حول استخدام فئة DefaultAzureCredential لتخويل هوية مدارة للوصول إلى Blob Storage، راجع مكتبة عميل Azure Identity ل .NET.

يوضح مقتطف التعليمات البرمجية التالي كيفية الحصول على بيانات اعتماد الرمز المميز المصادق عليه واستخدامه لإنشاء عميل خدمة لتخزين كائن ثنائي كبير الحجم:

// Construct the blob endpoint from the account name.
string endpoint = $"https://{accountName}.blob.core.windows.net";

// Create a blob service client object using DefaultAzureCredential
BlobServiceClient blobServiceClient = new BlobServiceClient(
    new Uri(endpoint),
    new DefaultAzureCredential());

لمعرفة المزيد حول تخويل الوصول إلى Blob Storage من تطبيقاتك باستخدام .NET SDK، راجع كيفية مصادقة تطبيقات .NET باستخدام خدمات Azure.

الحصول على مفتاح التفويض الخاص بالمستخدم

يتم عملية توقيع كل SAS بمفتاح. لإنشاء SAS تفويض مستخدم، يجب عليك أولا طلب مفتاح التفويض الخاص بالمستخدم، والذي يتم استخدامه بعد ذلك لتوقيع SAS. مفتاح تفويض المستخدم مشابه لمفتاح الحساب المستخدم لتوقيع SAS للخدمة أو SAS للحساب، باستثناء أنه يعتمد على بيانات اعتماد Microsoft Entra. عندما يطلب عميل مفتاح تفويض مستخدم باستخدام رمز OAuth 2.0 المميز، يقوم Blob Storage بإرجاع مفتاح تفويض المستخدم نيابة عن المستخدم.

بمجرد حصولك على مفتاح التفويض الخاص بالمستخدم، يمكنك استخدام هذا المفتاح لإنشاء أي عدد من توقيعات الوصول المشترك لتفويض المستخدم، على مدار عمر المفتاح. مفتاح تفويض المستخدم مستقل عن الرمز المميز OAuth 2.0 المستخدم للحصول عليه، لذلك لا يلزم تجديد الرمز المميز إذا كان المفتاح لا يزال صالحا. يمكنك تحديد المدة الزمنية التي يبقى فيها المفتاح صالحا، بحد أقصى سبعة أيام.

استخدم إحدى الطرق التالية لطلب مفتاح التفويض الخاص بالمستخدم:

يوضح مثال التعليمات البرمجية التالي كيفية طلب مفتاح تفويض المستخدم:

public static async Task<UserDelegationKey> RequestUserDelegationKey(
    BlobServiceClient blobServiceClient)
{
    // Get a user delegation key for the Blob service that's valid for 1 day
    UserDelegationKey userDelegationKey =
        await blobServiceClient.GetUserDelegationKeyAsync(
            DateTimeOffset.UtcNow,
            DateTimeOffset.UtcNow.AddDays(1));

    return userDelegationKey;
}

إنشاء توقيع الوصول المشترك لتفويض مستخدم لكائن ثنائي كبير الحجم

بمجرد الحصول على مفتاح تفويض المستخدم، يمكنك إنشاء SAS لتفويض مستخدم لتفويض وصول محدود إلى مورد كائن ثنائي كبير الحجم. يوضح مثال التعليمات البرمجية التالي كيفية إنشاء SAS لتفويض مستخدم لكائن ثنائي كبير الحجم:

public static async Task<Uri> CreateUserDelegationSASBlob(
    BlobClient blobClient,
    UserDelegationKey userDelegationKey)
{
    // Create a SAS token for the blob resource that's also valid for 1 day
    BlobSasBuilder sasBuilder = new BlobSasBuilder()
    {
        BlobContainerName = blobClient.BlobContainerName,
        BlobName = blobClient.Name,
        Resource = "b",
        StartsOn = DateTimeOffset.UtcNow,
        ExpiresOn = DateTimeOffset.UtcNow.AddDays(1)
    };

    // Specify the necessary permissions
    sasBuilder.SetPermissions(BlobSasPermissions.Read | BlobSasPermissions.Write);

    // Add the SAS token to the blob URI
    BlobUriBuilder uriBuilder = new BlobUriBuilder(blobClient.Uri)
    {
        // Specify the user delegation key
        Sas = sasBuilder.ToSasQueryParameters(
            userDelegationKey,
            blobClient
            .GetParentBlobContainerClient()
            .GetParentBlobServiceClient().AccountName)
    };

    return uriBuilder.ToUri();
}

استخدام توقيعات الوصول المشترك لتفويض مستخدم لتخويل كائن عميل

يوضح مثال التعليمات البرمجية التالي كيفية استخدام توقيع الوصول المشترك لتفويض المستخدم لتخويل كائن BlobClient . يمكن استخدام كائن العميل هذا لتنفيذ العمليات على مورد الكائن الثنائي كبير الحجم استنادا إلى الأذونات الممنوحة من قبل SAS.

// Create a Uri object with a user delegation SAS appended
BlobClient blobClient = blobServiceClient
    .GetBlobContainerClient("sample-container")
    .GetBlobClient("sample-blob.txt");
Uri blobSASURI = await CreateUserDelegationSASBlob(blobClient, userDelegationKey);

// Create a blob client object with SAS authorization
BlobClient blobClientSAS = new BlobClient(blobSASURI);

الموارد

لمعرفة المزيد حول إنشاء SAS لتفويض مستخدم باستخدام مكتبة عميل Azure Blob Storage ل .NET، راجع الموارد التالية.

عمليات واجهة برمجة تطبيقات REST

يحتوي Azure SDK ل .NET على مكتبات تستند إلى واجهة برمجة تطبيقات AZURE REST، مما يسمح لك بالتفاعل مع عمليات REST API من خلال نماذج .NET المألوفة. تستخدم طريقة مكتبة العميل للحصول على مفتاح تفويض المستخدم عمليات واجهة برمجة تطبيقات REST التالية:

موارد مكتبة العميل

(راجع أيضًا )