استخدام واجهة برمجة تطبيقات OneDrive دون تفاعل المستخدم، مثل برنامج دفعي (إصدار .NET C#) (لا توجد مكتبات استخدام إضافية)
بيئة التشغيل
- استوديو مرئي
-
- برنامج Visual Studio 2022
- .صافي
-
- .NET 8
- واجهة برمجة تطبيقات مصادقة Microsoft
-
- 2.0 OAuth 2
- واجهة برمجة تطبيقات Microsoft OneDrive
-
- 1.0
- أنواع حسابات Microsoft
-
- حساب العمل أو المؤسسة التعليمية
المتطلبات المسبقه
- استوديو مرئي
-
- أحد الإصدارات
- .صافي
-
- أحد الإصدارات
- واجهة برمجة تطبيقات مصادقة Microsoft
-
- 2.0 OAuth 2
- واجهة برمجة تطبيقات Microsoft OneDrive
-
- 1.0
- أنواع حسابات Microsoft
-
- حساب العمل أو المؤسسة التعليمية
حول الغرض من هذا الحدث
ستستخدم الآن واجهات برمجة تطبيقات OneDrive لإعدادك لتحميل الملفات وتنزيلها برمجيا على OneDrive. في هذه المقالة ، سننتقل إلى ما يمكنك القيام به باستخدام واجهة برمجة تطبيقات OneDrive ، لذلك لن ندخل في ما يمكنك القيام به باستخدام واجهة برمجة تطبيقات OneDrive. ومع ذلك ، طالما يمكنك الاتصال ، يمكنك قراءة وثائق واجهة برمجة التطبيقات وتطبيقها بعد ذلك.
كيفية تشغيل البرنامج
لا يعتمد الوصول إلى OneDrive على شكل البرنامج، مثل تطبيق ويب أو تطبيق سطح مكتب أو تطبيق وحدة تحكم، ويمكن تشغيله بواسطة مجموعة متنوعة من البرامج. في هذه الحالة ، سنقوم بإنشاء تطبيق وحدة تحكم وتنفيذه تلقائيا دون أي عملية مستخدم.
ما هي الأنواع المختلفة لحسابات Microsoft؟
إذا سبق لك إنشاء حساب Microsoft ، فمن المحتمل أنك رأيته. هناك نوعان رئيسيان من حسابات Microsoft: حسابات Microsoft الشخصية وحسابات العمل أو المدرسة. يرتبط OneDrive بحساب Microsoft، ولكن يختلف نوع OneDrive اختلافا طفيفا وفقا لنوع الحساب المذكور أعلاه.
في الوقت الحالي، يمكن استخدام واجهة برمجة تطبيقات OneDrive مع كلا النوعين من الحسابات المذكورة أعلاه. في هذا البرنامج في شكل "تم إنشاؤه كتطبيق وحدة تحكم وتنفيذه بدون تشغيل المستخدم" ، يرجى ملاحظة أنه لا يمكن استخدامه إلا مع حساب Microsoft في حساب "حساب العمل أو المؤسسة التعليمية". هذا يرجع إلى الاختلافات في طرق المصادقة.
حول طريقة المصادقة
أولا، يجب عليك المصادقة للوصول إلى OneDrive برمجيا. كما ذكرنا أعلاه ، يمكن لأي برنامج الوصول إلى OneDrive ، لكن المصادقة للاتصال بواجهة برمجة التطبيقات تعتمد على كيفية تشغيل البرنامج. يمكن مصادقة تطبيقات الويب وتطبيقات سطح المكتب من خلال تفاعل المستخدم. نظرا لأن المستخدم لا يمكنه تشغيله في تطبيق وحدة تحكم يعمل في الخلفية، فإن طريقة المصادقة تختلف أيضا عما سبق.
لا أعرف السبب التفصيلي لأنني لم أتمكن من البحث عنه ، ولكن إذا كان يتبادر إلى الذهن ، فيبدو أنه يرجع إلى الأمان وإدارة الحساب. لا يسعني إلا أن أقول إن هذه مواصفات بالفعل ، لذلك إذا كنت ترغب في الوصول برمجيا إلى OneDrive المرتبط ب "حساب Microsoft الشخصي" ، أعتقد أنه لا يوجد خيار سوى استخدام برنامج آخر غير البرنامج الذي يعمل في الخلفية ، أو لتشغيل تطبيق وحدة تحكم بطريقة مصادقة تتضمن عمليات المستخدم.
لن نستخدم المكتبة للوصول إلى واجهة برمجة تطبيقات OneDrive في الوقت الحالي
من السهل نسبيا التعامل مع الوصول إلى واجهة برمجة تطبيقات OneDrive باستخدام مكتبة تسمى "Microsoft Graph". في هذه الحالة ، سنستخدم طريقة الوصول المباشر إلى عنوان URL لواجهة برمجة التطبيقات وتنفيذه. إنه أمر مرهق بعض الشيء ، ولكن نظرا لأنه لا يستخدم مكتبة ، فإنه يتمتع بميزة أن non-.NET البرامج يمكنها الوصول إلى واجهة برمجة تطبيقات OneDrive بنفس الطريقة. كما أنه يمنع عيب تغيير الكود بسبب إصدارات مختلفة من المكتبة.
سنوضح لك كيفية استخدام Microsoft Graph في نصيحة أخرى.
الشرط المسبق
- لديك حساب Microsoft لحساب العمل أو المؤسسة التعليمية
- يمكنك استخدام OneDrive المقترن بحساب Microsoft المدرج أعلاه (على سبيل المثال، OneDrive Business)
- تم تثبيت Visual Studio 2022
إعداد التطبيق الخاص بك للوصول إلى حساب Microsoft أو OneDrive في Azure
سجل الدخول إلى Azure على عنوان URL التالي:
من حقل البحث أعلاه ، اكتب "تسجيلات التطبيقات" وحدده.
انقر فوق تسجيل جديد.
محتوى "الاسم" تعسفي. الرجاء إدخال اسم وصفي.
حدد "نوع الحساب المدعوم" بخلاف "حسابات Microsoft الشخصية فقط". هذا لأنه ، كما ذكرنا أعلاه ، لا يمكن استخدام هذه المصادقة إلا مع الحسابات التي تنتمي إلى المؤسسة. في هذه الحالة، حددنا "الحسابات في أي دليل تنظيمي (أي مستأجر معرف Microsoft Entra - متعدد المستأجرين) وحسابات Microsoft الشخصية (Skype وXbox وما إلى ذلك)".
لا تحتاج إلى إدخال "عنوان URI لإعادة التوجيه" لأنه لن يتم استخدامه هذه المرة.
عند الانتهاء ، انقر فوق الزر "تسجيل".
سيتم نقلك إلى صفحة الملخص الخاصة بتسجيل التطبيق الذي قمت بإنشائه، لذا انسخ معرف التطبيق (العميل) ومعرف الدليل (المستأجر). ستستخدم هذه القيمة لاحقا.
حدد "الشهادات والأسرار" من فئة الإدارة في القائمة اليسرى ، وتأكد من تحديد "أسرار العميل" في علامة التبويب الوسطى. انقر فوق سر عميل جديد.
إدخال وصف اختياري. إذا كنت ترغب في الاستمرار في استخدامه ، فيرجى تضمين شرح يشرح بوضوح الغرض من الاستخدام.
"تاريخ انتهاء الصلاحية" هو الفترة الزمنية التي يكون فيها سر العميل صالحا. نظرا لأنه لأغراض الاختبار هذه المرة ، فهو 90 يوما ، ولكن يرجى ضبطه وفقا لغرض الاستخدام.
عند إنشاء سر عميل، تتم إضافته إلى القائمة. في هذا ، سنستخدم القيمة في عمود "القيمة" ، لذا انسخها. لاحظ أنه لا يمكن نسخ هذه القيمة لاحقا.
بعد ذلك ، حدد "أذونات واجهة برمجة التطبيقات" من فئة الإدارة في القائمة اليسرى وانقر فوق "إضافة أذونات" في المنتصف.
في طلب إذن واجهة برمجة التطبيقات، انقر فوق Microsoft Graph.
انقر على السماح بالتطبيق. هذا الخيار غير متوفر لحسابات Microsoft الشخصية.
سيتم عرض قائمة بالأذونات أدناه ، لذا استخدم حقل البحث للتحقق من العناصر التالية.
- Files.ReadWrite.All
هذا يكفي إذا كنت تريد استخدام OneDrive فقط ، ولكن إذا كنت تريد الوصول إلى أي شيء آخر ، فأضف أذونات. يمكن العثور على الأذونات المطلوبة للوصول إلى OneDrive على الصفحة الرسمية أدناه.
بمجرد إجراء اختياراتك ، انقر فوق الزر "إضافة أذونات".
تتم إضافة الإضافة إلى القائمة ، و "النوع" هو "التطبيق". ومع ذلك ، نظرا لأن "الحالة" هي "غير ممنوحة ل XXXX" ، انقر فوق "منح موافقة المسؤول على XXXX". (XXXX هو اسم مؤسستك)
انقر فوق نعم.
يتغير إلى الحالة الممنوحة.
بالمناسبة ، يمكنك حذف "Delegated User.Read" الموجود منذ البداية لأننا لن نستخدمه هذه المرة. إذا أضفت "User.Read" كتطبيق، فاستخدمه.
التحقق من معرفات المستخدمين
نظرا لأنك ستصل إلى OneDrive الذي يمتلكه المستخدم المستهدف ، تحقق من معرف المستخدم مسبقا.
Microsoft Entra ID
وافتحه.
حدد المستخدمون من القائمة الموجودة على اليمين.
سيتم عرض قائمة بالمستخدمين ، لذا انقر فوق المستخدم المستهدف.
قم بتدوين "معرف الكائن" لأنه سيكون معرف المستخدم.
إنشاء تطبيق وحدة تحكم
ابدأ تشغيل Visual Studio وقم بإنشاء مشروع لتطبيق وحدة التحكم الخاصة بك. يمكنك إنشاؤه خارج Visual Studio ، لكنني سأستخدم Visual Studio في الوقت الحالي.
الموقع واسم المشروع اختياريان. في هذه الحالة ، يكون اسم OneDriveApiDotNetClientCredentialsHttpClient
المشروع .
هذه المرة ، لن نقسم الكود ، لكننا Program.cs
سنكتبه متداخلا من الأعلى ، لذلك إذا كان بإمكانك التحقق من الحركة ، فيرجى إعادة كتابتها بقسمة الكود حسب الضرورة.
using System.Runtime.Serialization.Json;
using System.Text;
using System.Text.Json;
using System.Web;
using System.Xml;
صف مساحة الاسم التي تريد استخدامها.
// 認証結果を格納するクラスです
public record TokenResponse(string token_type, int expires_in, int ext_expires_in, string access_token);
تستخدم هذه الفئة لتلقي معلومات الرمز المميز بعد المصادقة.
Program.cs
، يرجى كتابته في نهاية الكود.
يمكنك فصل هذه الفئة إلى ملفات أخرى.
// JSON 文字列を整形するメソッド
static string ConvertToIndentedJson(string json)
{
byte[] buffer = Encoding.UTF8.GetBytes(json);
using MemoryStream stream = new();
using XmlDictionaryWriter writer = JsonReaderWriterFactory.CreateJsonWriter(stream, Encoding.UTF8, true, true);
using XmlDictionaryReader reader = JsonReaderWriterFactory.CreateJsonReader(buffer, XmlDictionaryReaderQuotas.Max);
writer.WriteNode(reader, true);
writer.Flush();
return Encoding.UTF8.GetString(stream.ToArray());
}
هذه طريقة سحرية تقوم بتنسيق نص JSON المستلم من واجهة برمجة التطبيقات باستخدام المسافة البادئة. نظرا لأنه رمز تم التقاطه من الإنترنت ، فلن أشرح المحتويات بالتفصيل.
// 各種 ID などの定義
var clientId = "XXXXXXXX"; // クライアント ID
var tenantId = "XXXXXXXX"; // テナント ID
var clientSecret = "XXXXXXXX"; // クライアント シークレット
var userId = "XXXXXXXX"; // ユーザー ID
var accessToken = ""; // アクセストークン
قم بتعيين المعرف الذي تم الحصول عليه على Azure لكل منها.
accessToken
هو رمز مميز مؤقت للوصول إلى OneDrive ، لذلك يتم تعيينه في وقت التشغيل.
// 各種 URL の定義
var urlToken = $"https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token";
var urlOneDriveGetRootFolders = $"https://graph.microsoft.com/v1.0/users/{userId}/drive/root/children";
عنوان URL لواجهة برمجة التطبيقات للمصادقة وعنوان URL لواجهة برمجة التطبيقات للحصول على قائمة المجلدات في جذر OneDvie. هذا وصف لكيفية التحقق من الوصول إلى واجهة برمجة تطبيقات OneDrive ، لذلك لن أصف محتويات واجهة برمجة تطبيقات OneDrive. إذا كان لديك حق الوصول إلى واجهة برمجة تطبيقات OneDrive ، فإن التحميل والتنزيل هو تطبيق ، لذلك لا أعتقد أنه بهذه الصعوبة.
// 使いまわすので最初に定義しておく
HttpClient httpClient = new();
لقد قمت بإنشاء ملف لتقديم طلب إلى HttpClient
عنوان URL المحدد.
// 「Name1=Value1&Name2=Value2...」形式のクエリパラメータ文字列を作成する
var valueDict = new Dictionary<string, string>
{
{ "client_id", clientId },
{ "scope", "https://graph.microsoft.com/.default" },
{ "client_secret", clientSecret },
{ "grant_type", "client_credentials" },
};
var valueQS = string.Join("&", valueDict.Select(x => string.Format("{0}={1}", x.Key, HttpUtility.UrlEncode(x.Value))));
Console.WriteLine($"valueQS={valueQS}");
أولا، ستقدم طلبا إلى واجهة برمجة تطبيقات المصادقة مع البيانات، لذا قم بإعداد هذه البيانات. تنسيق البيانات المراد إرسالها هو سلسلة معلمات استعلام بالتنسيق "Name1 = Value1 & Name2 = Value2 ..." ، لذلك يتم إنشاؤها في قاموس ثم تحويلها إلى سلسلة معلمات استعلام.
هناك أربع معلمات يجب إرسالها:
مثالعلى قيم | اسم المعلمة |
---|---|
client_id | قم بتعيين معرف العميل الذي حصلت عليه في تسجيل التطبيق. |
نطاق | تم إصلاح https://graph.microsoft.com/.default المصادقة مع سر العميل . |
client_secret | قم بتعيين قيمة سر العميل الذي حصلت عليه في تسجيل التطبيق. |
grant_type | نظرا لأنها مصادقة مع سر العميل ، client_credentials فستكون كذلك |
لمزيد من المعلومات ، يرجى الرجوع إلى الموقع الرسمي التالي.
// 認証処理
using (HttpRequestMessage request = new(HttpMethod.Post, urlToken))
{
request.Content = new StringContent(valueQS, Encoding.UTF8, "application/x-www-form-urlencoded");
// データを送信し結果を受け取る
using var response = httpClient.SendAsync(request).Result;
Console.WriteLine($"IsSuccessStatusCode={response.IsSuccessStatusCode}");
Console.WriteLine($"StatusCode={response.StatusCode}");
Console.WriteLine($"ReasonPhrase={response.ReasonPhrase}");
if (response.IsSuccessStatusCode == false)
{
Console.WriteLine("トークンの取得に失敗しました。");
return;
}
// レスポンスからアクセストークンを受け取る。
var tokenResultJson = response.Content.ReadAsStringAsync().Result;
Console.WriteLine($"tokenResultJson={ConvertToIndentedJson(tokenResultJson)}");
var tokenResult = JsonSerializer.Deserialize<TokenResponse>(tokenResultJson) ?? throw new Exception("JSON をデシリアライズできませんでした。");
accessToken = tokenResult.access_token;
}
HttpClient
لتقديم طلب إلى واجهة برمجة تطبيقات المصادقة. HttpClient
إنه استخدام شائع ، لذلك لا أعتقد أن هناك الكثير مما يجب الانتباه إليه.
يجب أن تكون البيانات المراد إرسالها مشفرة ب UTF8 ويجب أن يكون application/x-www-form-urlencoded
نوع المحتوى . الطريقة هي POST
.
إذا تم التحقق من الاستجابة IsSuccessStatusCode
ومعالجتها بنجاح، فستتلقى النتيجة كسلسلة JSON.
يحتوي JSON الذي تتلقاه على المعلمات التالية:
{
"token_type": "Bearer",
"expires_in": 3599,
"ext_expires_in": 3599,
"access_token": "XXXXXXXXXXXXXXX"
}
في هذا ، access_token
سوف نستخدم . استخدم هذه القيمة مع واجهة برمجة تطبيقات OneDrive.
يمكنك تجاهل المعلمات الأخرى ، ولكنaccess_token
إذا كنت تريد معرفة تاريخ انتهاء صلاحية ، فاستخدم expires_in
.
من الصعب استخدامه كسلسلة JSON ، لذلك JsonSerializer.Deserialize
نقوم بإلغاء تسلسلها مع ثم access_token
الحصول على.
// OneDrive 処理
using (HttpRequestMessage request = new(HttpMethod.Get, urlOneDriveGetRootFolders))
{
// アクセストークンをヘッダーに追加する
request.Headers.Add("Authorization", "Bearer " + accessToken);
// OneDrive API にリクエスト
using var response = httpClient.SendAsync(request).Result;
Console.WriteLine($"IsSuccessStatusCode={response.IsSuccessStatusCode}");
Console.WriteLine($"StatusCode={response.StatusCode}");
Console.WriteLine($"ReasonPhrase={response.ReasonPhrase}");
if (response.IsSuccessStatusCode == false)
{
Console.WriteLine("OneDrive へのアクセスに失敗しました。");
return;
}
// レスポンスからアクセストークンを受け取る。
var apiResultJson = response.Content.ReadAsStringAsync().Result;
Console.WriteLine($"apiResultJson={ConvertToIndentedJson(apiResultJson)}");
}
أخيرا ، استخدم رمز الوصول المميز لتقديم طلب إلى واجهة برمجة تطبيقات OneDrive.
تحدد GET
الطريقة ، ولكنها تعتمد على نوع واجهة برمجة التطبيقات ، لذا تحقق من وثائق واجهة برمجة تطبيقات OneDrive.
أضف رمز الوصول إلى الرأس. قم بتعيين المفتاح as Authorization
والقيمة في Bearer {アクセストークン}
التنسيق .
كل ما عليك فعله هو تقديم طلب وتلقي النتيجة كسلسلة JSON. الآن بعد أن تأكدنا فقط من أن لدينا إمكانية الوصول إلى واجهة برمجة تطبيقات OneDrive، نقوم فقط بتنسيق سلسلة JSON وطباعتها على وحدة التحكم. في الواقع ، فإنه يزيل تسلسل JSON المستلم ويعالجها وفقا لذلك.
لقد تلقيت قائمة بالمجلدات هذه المرة ، لكنني أعتقد أن JSON على النحو التالي.
{
"@odata.context": "https:\/\/graph.microsoft.com\/v1.0\/$metadata#Collection(driveItem)",
"value": [
{
"@microsoft.graph.Decorator": "decorator has been deprecated. Refer to folder.decorator",
"createdBy": {
"フォルダ作成者の情報":""
},
"createdDateTime": "2017-06-20T04:31:24Z",
"eTag": "\"{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX},1\"",
"id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"lastModifiedBy": {
"フォルダ更新者の情報":""
},
"lastModifiedDateTime": "2017-06-20T04:31:24Z",
"name": "フォルダ名",
"parentReference": {
"親フォルダの情報":""
},
"webUrl": "フォルダにアクセスできる URL",
"cTag": "\"c:{5926E2DA-B7FF-4936-88A8-7908C378ECE2},0\"",
"fileSystemInfo": {
"createdDateTime": "2017-06-20T04:31:24Z",
"lastModifiedDateTime": "2017-06-20T04:31:24Z"
},
"folder": {
"childCount": 0
},
"size": 0,
"specialFolder": {
"name": "フォルダ名"
}
},
:
]
}
لا أعتقد أنك بحاجة إلى جميع المعلومات ، لذلك إذا كنت ترغب في الحصول على اسم المجلد فقط ، على سبيل المثال ، value
يمكنك الحصول فقط على المعلمات من name
المصفوفة في .
ملخص
إذا كان يعمل بشكل جيد حتى الآن ، فيجب أن تكون قادرا على الوصول إلى OneDrive باستخدام برنامج دفعي. لا أعرف ما إذا كانت النصائح تلخص طرق التحميل والتنزيل ، ولكن يجب أن تعمل بشكل أساسي إذا قمت بتطبيق قائمة المجلدات في الجذر الموضح أعلاه. يتم تلخيص أنواع واجهات برمجة التطبيقات على الموقع الرسمي أدناه ، لذا يرجى العثور على واجهة برمجة التطبيقات التي تريد استخدامها وتنفيذها.
شكرا
كان لدي بعض الأسئلة حول استخدام واجهة برمجة تطبيقات OneDrive هذه المرة، لذلك طرحت سؤالا.