📁
Octokit.NETを利用し、デバイスフロー認証を使用して、任意のリポジトリに直接ファイルを追加する
解法
Octokit.NETライブラリとデバイスフロー認証を使用して、GitHubの任意のリポジトリにファイルを追加する手順は以下の通りです:
- GitHub OAuth Appを作成する
- Octokit.NETライブラリをプロジェクトに追加する
- デバイスフロー認証を実装してアクセストークンを取得する
- GitHubクライアントを初期化し、認証する
- リポジトリにファイルを追加する
解説
1. GitHub OAuth Appの作成
- GitHubの"Settings" > "Developer settings" > "OAuth Apps"に移動
- "New OAuth App"をクリックし、必要な情報を入力
-
重要: Authorization callback URLには
http://localhost
を入力 - 注意: アプリケーションの設定で「Enable Device Flow」オプションを必ず有効にしてください
-
重要: Authorization callback URLには
- アプリケーションを作成後、Client IDを取得
2. Octokit.NETのインストール
NuGetパッケージマネージャーを使用して、Octokit.NETをプロジェクトに追加します。
dotnet add package Octokit
3. デバイスフロー認証の実装
using Octokit;
var client = new GitHubClient(new ProductHeaderValue("YourAppName"));
var clientId = "YOUR_CLIENT_ID"; // OAuth Appから取得したクライアントID
var request = new OauthDeviceFlowRequest(clientId);
request.Scopes.Add("repo"); // リポジトリへのアクセス権を要求
var deviceFlow = await client.Oauth.InitiateDeviceFlow(request);
Console.WriteLine($"Please visit: {deviceFlow.VerificationUri}");
Console.WriteLine($"And enter the code: {deviceFlow.UserCode}");
var token = await client.Oauth.CreateAccessTokenForDeviceFlow(clientId, deviceFlow);
client.Credentials = new Credentials(token.AccessToken);
4. リポジトリへのファイル追加
string owner = "RepositoryOwner";
string repoName = "RepositoryName";
string path = $"{DateTime.Now:yyyyMMdd-HHmmss}.txt";
string content = "Hello, World!";
string commitMessage = "Add new file via Octokit.NET";
try
{
var fileRequest = new CreateFileRequest(commitMessage, content, branch: "main");
var result = await client.Repository.Content.CreateFile(owner, repoName, path, fileRequest);
Console.WriteLine($"File created successfully: {result.Content.Path}");
}
catch (ApiException ex)
{
Console.WriteLine($"Error creating file: {ex.Message}");
}
補足情報
- デバイスフロー認証は、デスクトップアプリケーションやCLIツールに適しています。
-
repo
スコープを要求することで、プライベートリポジトリを含む全リポジトリへのアクセスが可能になります。 - エラーが発生した場合、認証スコープとリポジトリへのアクセス権限を確認してください。
- セキュリティのため、アクセストークンは安全に管理し、必要最小限の権限のみを要求することが重要です。
- リポジトリのデフォルトブランチが "main" でない場合、ファイル作成時のブランチ名を適切に変更してください。
この方法を使用することで、Octokit.NETライブラリとデバイスフロー認証を介して、GitHubの任意のリポジトリに直接ファイルを追加することができます。
Discussion