Používanie rozhrania OneDrive API bez interakcie používateľa, ako je napríklad dávkový program (verzia .NET C#) (žiadne ďalšie knižnice na použitie)
Prevádzkové prostredie
- Visual Studio
-
- Visual Studio 2022
- .SIEŤ
-
- .NET 8
- Microsoft Authentication API
-
- 2.0 OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Typy kont Microsoft
-
- Pracovné alebo školské konto
Predpoklady
- Visual Studio
-
- Jedna z verzií
- .SIEŤ
-
- Jedna z verzií
- Microsoft Authentication API
-
- 2.0 OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Typy kont Microsoft
-
- Pracovné alebo školské konto
O účele tohto podujatia
Teraz sa pomocou rozhraní API OneDrivu pripravíte na programové nahrávanie a sťahovanie súborov do OneDrivu. V tomto článku sa budeme zaoberať tým, čo môžete robiť s rozhraniom OneDrive API, takže sa nebudeme zaoberať tým, čo môžete robiť s rozhraním OneDrive API. Pokiaľ sa však môžete pripojiť, môžete si prečítať dokumentáciu API a potom ju použiť.
Ako spustiť program
Prístup k OneDrive nezávisí od formy programu, ako je napríklad webová aplikácia, počítačová aplikácia alebo konzolová aplikácia, a môže byť spustený rôznymi programami. V takom prípade vytvoríme konzolovú aplikáciu a spustíme ju automaticky bez akejkoľvek operácie používateľa.
Aké sú rôzne typy kont Microsoft?
Ak ste si niekedy vytvorili konto Microsoft, pravdepodobne ste ho videli. Existujú dva hlavné typy kont Microsoft: osobné kontá Microsoft a pracovné alebo školské kontá. OneDrive je prepojený s kontom Microsoft, ale typ OneDrivu sa mierne líši v závislosti od typu konta uvedeného vyššie.
Zatiaľ je možné OneDrive API používať s oboma vyššie uvedenými typmi účtov. V tomto programe vo forme "vytvorené ako konzolová aplikácia a spustené bez operácie používateľa", Upozorňujeme, že ho možno používať iba s kontom Microsoft v konte "Pracovné alebo školské konto". Je to spôsobené rozdielmi v metódach autentifikácie.
Spôsob overovania
Najprv sa musíte overiť, aby ste mohli programovo pristupovať k OneDrive. Ako už bolo spomenuté vyššie, každý program má prístup k OneDrive, ale overenie pripojenia k API závisí od toho, ako je program spustený. Webové aplikácie a desktopové aplikácie je možné overiť interakciou používateľa. Keďže ho používateľ nemôže ovládať v konzolovej aplikácii, ktorá beží na pozadí, spôsob autentifikácie sa tiež líši od vyššie uvedeného.
Nepoznám podrobný dôvod, pretože som si to nemohol vyhľadať, ale ak mi to príde na myseľ, zdá sa, že je to kvôli bezpečnosti a správe účtu. Môžem len povedať, že toto je už špecifikácia, takže ak chcete programovo pristupovať k OneDrive spojenému s "osobným účtom Microsoft", Myslím si, že nie je iná možnosť, ako použiť iný program ako program, ktorý beží na pozadí, alebo spustiť konzolovú aplikáciu s metódou autentifikácie, ktorá zahŕňa operácie používateľa.
V súčasnosti nebudeme knižnicu používať na prístup k rozhraniu OneDrive API
Prístup k rozhraniu OneDrive API je pomerne jednoduchý pomocou knižnice s názvom "Microsoft Graph". V tomto prípade použijeme metódu priameho prístupu k adrese URL rozhrania API a jej spustenia. Je to trochu ťažkopádne, ale keďže nepoužíva knižnicu, má tú výhodu, že non-.NET programy môžu rovnakým spôsobom pristupovať k rozhraniu OneDrive API. Zabraňuje tiež nevýhode, že kód sa mení v dôsledku rôznych verzií knižnice.
V ďalšom tipe vám ukážeme, ako používať Microsoft Graph.
Predpokladom
- Máte konto Microsoft pre pracovné alebo školské konto
- Môžete použiť OneDrive priradený ku kontu Microsoft uvedenému vyššie (napr. OneDrive Business)
- Nainštalovaný Visual Studio 2022
Nastavenie aplikácie na prístup ku kontu Microsoft alebo OneDrive v Azure
Prihláste sa do Azure na nasledujúcej URL adrese:
Z vyhľadávacieho poľa vyššie zadajte "registrácie aplikácií" a vyberte ho.
Kliknite na Nová registrácia.
Obsah "Názov" je ľubovoľný. Zadajte popisný názov.
Vyberte "Podporovaný typ konta" iný ako "Iba osobné kontá Microsoft". Je to preto, že, ako už bolo spomenuté vyššie, toto overenie je možné použiť iba s účtami, ktoré patria organizácii. V tomto prípade sme vybrali "Kontá v ľubovoľnom adresári organizácie (ľubovoľný nájomník Microsoft Entra ID - multi-tenant) a osobné kontá Microsoft (Skype, Xbox atď.)".
Nemusíte zadávať "Identifikátor URI presmerovania", pretože tentoraz sa nepoužije.
Po dokončení kliknite na tlačidlo "Registrovať".
Dostanete sa na stránku súhrnu registrácie aplikácie, ktorú ste vytvorili, takže skopírujte ID aplikácie (klienta) a ID adresára (nájomníka). Túto hodnotu použijete neskôr.
Vyberte "Certifikáty a tajné kódy" z kategórie správy v ľavom menu a uistite sa, že je na strednej karte vybratá možnosť "Klientske tajné kódy". Kliknite na položku Nový tajný kľúč klienta.
Zadanie popisu je voliteľné. Ak ho chcete naďalej používať, uveďte vysvetlenie, ktoré jasne vysvetľuje účel použitia.
"Dátum vypršania platnosti" je časové obdobie, počas ktorého je tento tajný kľúč klienta platný. Keďže je tentoraz na testovacie účely, je to 90 dní, ale nastavte ho podľa účelu použitia.
Keď vytvoríte tajný kľúč klienta, pridá sa do zoznamu. V tomto použijeme hodnotu v stĺpci "Hodnota", takže ju skopírujte. Upozorňujeme, že túto hodnotu nie je možné skopírovať neskôr.
Ďalej vyberte "Povolenia API" z kategórie Správa v ľavom menu a v strede kliknite na "Pridať povolenia".
V žiadosti o povolenie rozhrania API kliknite na položku Microsoft Graph.
Kliknite na položku Povoliť aplikáciu. Táto možnosť nie je k dispozícii pre osobné kontá Microsoft.
Nižšie sa zobrazí zoznam povolení, takže pomocou vyhľadávacieho poľa skontrolujte nasledujúce položky.
- Súbory.ReadWrite.All
To stačí, ak chcete používať iba OneDrive, ale ak chcete získať prístup k niečomu inému, pridajte povolenia. Povolenia potrebné na prístup k OneDrive nájdete na oficiálnej stránke nižšie.
Po vykonaní výberu kliknite na tlačidlo Pridať povolenia.
Pridaný sa pridá do zoznamu a "Typ" je "Aplikácia". Keďže však "Stav" je "Neudelené XXXX", kliknite na "Udeliť súhlas správcu XXXX". (XXXX je názov vašej organizácie)
Kliknite na tlačidlo Áno.
Mení sa na udelený stav.
Mimochodom, môžete odstrániť "delegovaný User.Read", ktorý je tam od začiatku, pretože ho tentoraz nepoužijeme. Ak ste ako aplikáciu pridali "User.Read", použite ju.
Overovanie ID používateľov
Keďže budete pristupovať k OneDrive, ktorý má cieľový používateľ, vopred skontrolujte ID používateľa.
Microsoft Entra ID
a otvorte ho.
V ponuke vľavo vyberte položku Používatelia.
Zobrazí sa zoznam používateľov, preto kliknite na cieľového používateľa.
Poznačte si "ID objektu", pretože to bude ID používateľa.
Vytvorenie konzolovej aplikácie
Spustite Visual Studio a vytvorte projekt pre konzolovú aplikáciu. Môžete ho vytvoriť mimo Visual Studia, ale zatiaľ budem používať Visual Studio.
Umiestnenie a názov projektu sú voliteľné. V tomto prípade je OneDriveApiDotNetClientCredentialsHttpClient
názov projektu .
Tentokrát kód nebudeme rozdeľovať, ale Program.cs
napíšeme ho rozložený zhora, takže ak môžete skontrolovať pohyb, prepíšte ho rozdelením kódu podľa potreby.
using System.Runtime.Serialization.Json;
using System.Text;
using System.Text.Json;
using System.Web;
using System.Xml;
Popíšte priestor názvov, ktorý chcete použiť.
// 認証結果を格納するクラスです
public record TokenResponse(string token_type, int expires_in, int ext_expires_in, string access_token);
Táto trieda sa používa na príjem informácií o tokene po overení.
Program.cs
, napíšte to na koniec kódu.
Túto triedu môžete rozdeliť na iné súbory.
// 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());
}
Ide o magickú metódu, ktorá formátuje text JSON prijatý z API s odsadením. Keďže ide o kód prevzatý z internetu, nebudem podrobne vysvetľovať obsah.
// 各種 ID などの定義
var clientId = "XXXXXXXX"; // クライアント ID
var tenantId = "XXXXXXXX"; // テナント ID
var clientSecret = "XXXXXXXX"; // クライアント シークレット
var userId = "XXXXXXXX"; // ユーザー ID
var accessToken = ""; // アクセストークン
Nastavte ID získané v Azure pre každú z nich.
accessToken
je dočasný token na prístup k OneDrive, takže je nastavený za behu.
// 各種 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 adresa API na overenie a URL adresa API na získanie zoznamu priečinkov v koreňovom adresári OneDvie. Toto je popis toho, ako skontrolovať prístup k rozhraniu OneDrive API, takže obsah rozhrania OneDrive API nebudem popisovať. Ak máte prístup k rozhraniu OneDrive API, nahrávanie a sťahovanie je aplikácia, takže si nemyslím, že je to také ťažké.
// 使いまわすので最初に定義しておく
HttpClient httpClient = new();
Vygenerovali ste a na odoslanie žiadosti na HttpClient
zadanú adresu 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}");
Najprv odošlete žiadosť o overovacie rozhranie API s údajmi, takže si tieto údaje pripravte. Formát údajov, ktoré sa majú odoslať, je reťazec parametra dotazu vo formáte "Názov1=Hodnota1&Názov2=Hodnota2...", takže sa vytvorí v slovníku a potom sa skonvertuje na reťazec parametra dotazu.
Sú potrebné odoslať štyri parametre:
Príkladyhodnôt názvu parametrov | |
---|---|
client_id | Nastavte ID klienta, ktoré ste získali pri registrácii aplikácie. |
rozsah | Autentifikácia pomocou tajného kľúča klienta je opravená https://graph.microsoft.com/.default . |
client_secret | Nastavte hodnotu tajného kľúča klienta, ktorý ste získali pri registrácii aplikácie. |
grant_type | Keďže ide o autentifikáciu pomocou tajného kľúča klienta, client_credentials bude |
Viac informácií nájdete na nasledujúcom úradníkovi webmiesto.
// 認証処理
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
na odoslanie žiadosti na autentifikačné rozhranie API. HttpClient
Je to bežné použitie, takže si nemyslím, že je veľa pozornosti.
Údaje, ktoré sa majú odoslať, musia byť kódované UTF8 a Content-Type by mal byť application/x-www-form-urlencoded
. Metóda je POST
.
Ak IsSuccessStatusCode
je odpoveď úspešne skontrolovaná a spracovaná, výsledok sa zobrazí ako reťazec JSON.
Kód JSON, ktorý dostanete, má nasledujúce parametre:
{
"token_type": "Bearer",
"expires_in": 3599,
"ext_expires_in": 3599,
"access_token": "XXXXXXXXXXXXXXX"
}
V tomto access_token
použijeme . Túto hodnotu použite s rozhraním OneDrive API.
Ostatné parametre môžete ignorovať, aleaccess_token
ak chcete poznať dátum vypršania platnosti , použite expires_in
.
Je ťažké ho použiť ako reťazec JSON, takže JsonSerializer.Deserialize
ho deserializujeme pomocou a potom access_token
dostaneme .
// 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)}");
}
Nakoniec použite prístupový token na odoslanie žiadosti na rozhranie OneDrive API.
Metóda špecifikuje GET
, ale závisí to od typu API, preto si pozrite dokumentáciu k rozhraniu OneDrive API.
Pridajte prístupový token do hlavičky. Nastavte kľúč ako Authorization
a hodnotu vo formáte Bearer {アクセストークン}
.
Jediné, čo musíte urobiť, je zadať žiadosť a dostať výsledok ako reťazec JSON. Teraz, keď sa len uisťujeme, že máme prístup k rozhraniu OneDrive API, len formátujeme reťazec JSON a tlačíme ho do konzoly. V skutočnosti deserializuje prijatý JSON a podľa toho ho spracováva.
Tentoraz som dostal zoznam priečinkov, ale myslím si, že JSON je nasledovný.
{
"@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": "フォルダ名"
}
},
:
]
}
Nemyslím si, že potrebujete všetky informácie, takže ak chcete získať napríklad iba názov priečinka, value
môžete získať iba parametre z name
poľa v .
Súhrn
Ak to zatiaľ funguje dobre, mali by ste mať prístup k OneDrive pomocou dávkového programu. Neviem, či tipy sumarizujú spôsoby nahrávania a sťahovania, ale v zásade by to malo fungovať, ak použijete zoznam priečinkov v koreňovom adresári popísanom vyššie. Typy rozhraní API sú zhrnuté na oficiálnej webovej stránke nižšie, preto nájdite rozhranie API, ktoré chcete použiť, a implementujte ho.
vďaka
Tentokrát som mal niekoľko otázok týkajúcich sa používania rozhrania OneDrive API, tak som položil otázku.