OAuth 2.0 (original) (raw)

يوضّح هذا المستند بروتوكول OAuth 2.0، وحالات استخدامه، وكيفية الحصول على معرّفات العملاء، وكيفية استخدامه مع مكتبة برامج Google API لنظام ‎ .NET.

بروتوكول OAuth 2.0

‫OAuth 2.0 هو بروتوكول التفويض الذي تستخدمه Google APIs. يجب الاطّلاع على البروتوكول من خلال الروابط التالية:

الحصول على معرّفات العملاء وأسرارهم

يمكنك الحصول على معرّفات العملاء والأسرار في وحدة تحكّم واجهة برمجة تطبيقات Google. هناك أنواع مختلفة من أرقام تعريف العملاء، لذا احرص على الحصول على النوع الصحيح لتطبيقك:

في كل مقتطف من مقتطفات الرموز البرمجية المعروضة (باستثناء مقتطف حساب الخدمة)، عليك تنزيل مفتاح سر العميل وتخزينه باسم client_secrets.json في مشروعك.

بيانات الاعتماد

بيانات اعتماد المستخدم

UserCredential هي فئة مساعدة آمنة لسلسلة المهام لاستخدام رمز مميّز للوصول إلى الموارد المحمية. تنتهي صلاحية الرمز المميّز للوصول عادةً بعد ساعة واحدة، وبعد ذلك ستظهر لك رسالة خطأ إذا حاولت استخدامه.

تحرص كل من UserCredential وAuthorizationCodeFlow على "إعادة تحميل" الرمز المميّز تلقائيًا، ما يعني الحصول على رمز دخول جديد. ويتم ذلك باستخدام رمز مميّز طويل الأمد لإعادة التحميل، والذي تتلقّاه مع رمز الوصول في حال استخدام المَعلمةaccess_type=offline أثناء مسار رمز التفويض.

في معظم التطبيقات، من المستحسن تخزين رمزَي هُوية الدخول وإعادة التنشيط لبيانات الاعتماد في مساحة تخزين دائمة. بخلاف ذلك، عليك عرض صفحة تفويض في المتصفّح للمستخدم النهائي كل ساعة، لأنّه تنتهي صلاحية رمز عبور الوصول بعد ساعة من استلامه.

لضمان استمرار رمزَي الوصول وإعادة التنشيط، يمكنك تقديم طريقة تنفيذ خاصة بك لرمزIDataStore، أو يمكنك استخدام إحدى طرق التنفيذ التالية التي تقدّمها المكتبة:

ServiceAccountCredential

ServiceAccountCredential يشبه UserCredential، ولكنّه يخدم غرضًا مختلفًا. يتيح Google OAuth 2.0 التفاعلات بين الخوادم، مثل التفاعلات بين تطبيق ويب وGoogle Cloud Storage. على التطبيق المُرسِل إثبات هويته للوصول إلى واجهة برمجة التطبيقات، ولا يلزم أن يكون هناك مستخدم نهائي. تخزِّن ServiceAccountCredential مفتاحًا خاصًا يُستخدَم لتوقيع طلب للحصول على رمز دخول جديد.

ينفِّذ كلّ من UserCredential وServiceAccountCredential IConfigurableHttpClientInitializer حتى تتمكّن من تسجيل كلّ منهما على النحو التالي:

التطبيقات المثبتة

نموذج رمز برمجي يستخدم Books API:

using System; using System.IO; using System.Threading; using System.Threading.Tasks;

using Google.Apis.Auth.OAuth2; using Google.Apis.Books.v1; using Google.Apis.Books.v1.Data; using Google.Apis.Services; using Google.Apis.Util.Store;

namespace Books.ListMyLibrary { ///

/// Sample which demonstrates how to use the Books API. /// https://developers.google.com/books/docs/v1/getting_started /// internal class Program { [STAThread] static void Main(string[] args) { Console.WriteLine("Books API Sample: List MyLibrary"); Console.WriteLine("================================"); try { new Program().Run().Wait(); } catch (AggregateException ex) { foreach (var e in ex.InnerExceptions) { Console.WriteLine("ERROR: " + e.Message); } } Console.WriteLine("Press any key to continue..."); Console.ReadKey(); }

    private async Task Run()
    {
        UserCredential credential;
        using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
        {
            credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                new[] { BooksService.Scope.Books },
                "user", CancellationToken.None, new FileDataStore("Books.ListMyLibrary"));
        }

        // Create the service.
        var service = new BooksService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "Books API Sample",
            });

        var bookshelves = await service.Mylibrary.Bookshelves.List().ExecuteAsync();
        ...
    }
}

}

يمكنك الاطّلاع على نموذج الكتب.

تطبيقات الويب (ASP.NET Core 3)

تتوافق Google APIs مع OAuth 2.0 لتطبيقات خادم الويب.

Google.Apis.Auth.AspNetCore3 هي المكتبة المُقترَحة لاستخدامها في معظم سيناريوهات OAuth 2.0 المستندة إلى Google في تطبيقات ASP.NET Core 3. وتنفِّذ معالج مصادقةOpenIdConnect خاصًا بـ Google. وهو يتيح المصادقة المتزايدة، ويحدّد IGoogleAuthProvider قابلاً للحقن لتوفير بيانات اعتماد Google التي يمكن استخدامها مع Google APIs.

يصف هذا القسم كيفية ضبط Google.Apis.Auth.AspNetCore3 واستخدامه. يستند الرمز المعروض هنا إلى Google.Apis.Auth.AspNetCore3.IntegrationTests وهو تطبيق ASP.NET Core 3 عادي يعمل بشكل كامل.

إذا كنت تريد اتّباع هذه المستندات كمرجع تعليمي، ستحتاج إلى تطبيق ASP.NET Core 3 الخاص بك وإكمال هذه الخطوات كشرط أساسي.

المتطلبات الأساسية

ضبط تطبيقك لاستخدام Google.Apis.Auth.AspNetCore3

تم ضبط Google.Apis.Auth.AspNetCore3 في فئة Startup أو بديل مشابه قد تستخدمه. تم استخراج المقتطفات التالية منملف برمجي Startup.cs في مشروع Google.Apis.Auth.AspNetCore3.IntegrationTests.

}

استخدام بيانات اعتماد المستخدم للوصول إلى Google APIs نيابةً عنه

أنت الآن مستعد لإضافة طرق الإجراءات إلى أدوات التحكّم التي تتطلّب بيانات اعتماد المستخدمين لأجل الوصول إلى Google APIs نيابةً عنهم. يوضّح المقتطف التالي كيفية إدراج الملفات في حساب Google Drive للمستخدم الذي تمّت مصادقة هويته. يُرجى ملاحظة أمرَين بشكل أساسي:

الرمز:

وهذه هي الأساسيات. يمكنك الاطّلاع على HomeController.cs من مشروع Google.Apis.Auth.AspNetCore3.IntegrationTests لمعرفة كيفية تحقيق ما يلي:

حساب الخدمة

تتيح Google APIs أيضًا استخدامحسابات الخدمة. على عكس السيناريو الذي يطلب فيه تطبيق العميل الوصول إلى بيانات المستخدم النهائي، توفّر حسابات الخدمة إمكانية الوصول إلى بيانات تطبيق العميل.

يوقّع تطبيق العميل طلب الحصول على رمز مميّز للوصول باستخدام مفتاح خاص تم تنزيله من وحدة تحكّم واجهة برمجة تطبيقات Google. بعد إنشاء معرّف عميل جديد، عليك اختيار نوع تطبيق حساب الخدمة، ثم يمكنك تنزيل المفتاح الخاص. اطّلِع على مثال حساب الخدمة باستخدام Google Plus API.

using System; using System.Security.Cryptography.X509Certificates;

using Google.Apis.Auth.OAuth2; using Google.Apis.Plus.v1; using Google.Apis.Plus.v1.Data; using Google.Apis.Services;

namespace Google.Apis.Samples.PlusServiceAccount { ///

/// This sample demonstrates the simplest use case for a Service Account service. /// The certificate needs to be downloaded from the Google API Console /// /// "Create another client ID..." -> "Service Account" -> Download the certificate, /// rename it as "key.p12" and add it to the project. Don't forget to change the Build action /// to "Content" and the Copy to Output Directory to "Copy if newer". /// public class Program { // A known public activity. private static String ACTIVITY_ID = "z12gtjhq3qn2xxl2o224exwiqruvtda0i";

    public static void Main(string[] args)
    {
        Console.WriteLine("Plus API - Service Account");
        Console.WriteLine("==========================");

        String serviceAccountEmail = "SERVICE_ACCOUNT_EMAIL_HERE";

        var certificate = new X509Certificate2(@"key.p12", "notasecret", X509KeyStorageFlags.Exportable);

        ServiceAccountCredential credential = new ServiceAccountCredential(
           new ServiceAccountCredential.Initializer(serviceAccountEmail)
           {
               Scopes = new[] { PlusService.Scope.PlusMe }
           }.FromCertificate(certificate));

        // Create the service.
        var service = new PlusService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "Plus API Sample",
        });

        Activity activity = service.Activities.Get(ACTIVITY_ID).Execute();
        Console.WriteLine("  Activity: " + activity.Object.Content);
        Console.WriteLine("  Video: " + activity.Object.Attachments[0].Url);

        Console.WriteLine("Press any key to continue...");
        Console.ReadKey();
    }
}

}

ينشئ هذا المثالServiceAccountCredential. يتمّ ضبط النطاقات المطلوبة، وهناك طلب إلى FromCertificate، الذي يحمّل المفتاح الخاص من X509Certificate2 المحدّد. كما هو الحال في جميع نماذج الرموز البرمجية الأخرى، يتم ضبط بيانات الاعتماد على HttpClientInitializer.