.NET MAUIアプリ構築で、APIキーをサーバーから安全に取得する
マルチターゲットアプリ開発の新しいアプローチ~.NET 9 新テンプレートの基本~ 第6回
ダウンロード サンプルファイル (224.7 KB)
本連載では、.NET 9で登場した新しいソリューションテンプレートである「.NET MAUI Blazor HybridアプリとWebアプリ」について解説します。前回は、.NET MAUIのネイティブ機能を活用して、生成した画像をデバイスに保存する機能を実装しました。今回は、APIキーをソースコードに埋め込むのではなく、サーバーから安全に取得する方式に変更します。モバイルアプリにAPIキーを含めないことで、セキュリティを向上させることができます。
はじめに
前回は、.NET MAUIのネイティブ機能を活用して、生成した画像をデバイスに保存する機能を実装しました。今回は、APIキーをソースコードに埋め込むのではなく、サーバーから安全に取得する方式に変更します。モバイルアプリにAPIキーを含めないことで、セキュリティを向上させることができます。
また今回から、開発環境をVisual Studio 2026、.NET 10に変更しました。.NET 10は、LTS(長期サポート)版としてリリースされたバージョンです。
今回作成する機能
前回までのアプリに、APIキーをサーバーから安全に取得する機能を追加します。
- モバイルアプリにAPIキーを埋め込まず、Web側(サーバー側)から取得
- 取得したキーはSecureStorageに保存し、以降は再利用
この機能を、これまでと同じく、インターフェイスで抽象化し、DIで差し替える形で実装します。このAPIサーバー経由でのキー取得の流れをシーケンス図にすると、次のようになります。
APIサーバーの構築
これまで、MAUIではAPIキーをソースコードに埋め込む形で実装していましたが、これはセキュリティ上好ましくありません。ここからは、WebプロジェクトをAPIサーバーとしても機能させ、MAUIアプリからはサーバー経由でAPIキーを取得する方式に変更します。
APIサーバーのポート番号の確認
実装の前に、APIサーバーのポート番号を確認しておきましょう。Visual StudioでImageGenerator.Webプロジェクトを実行すると、ブラウザが起動してURLが表示されます(例:https://localhost:7299)。
このポート番号は、プロジェクトのPropertiesフォルダにあるlaunchSettings.jsonのapplicationUrlで確認・変更できます。以降の説明では、このポート番号を使用します。
APIエンドポイントの作成
ImageGenerator.WebプロジェクトのProgram.csを修正して、Minimal APIを使ったエンドポイントを定義します。Minimal APIとは、ASP.NET Coreで導入された最小構成のWeb APIフレームワークのことです。
var builder = WebApplication.CreateBuilder(args);
// 既存のサービス登録
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
// CORSポリシーの追加 (1)
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowMauiApp", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
});
});
~既存のサービス登録~
var app = builder.Build();
app.UseStaticFiles();
app.UseAntiforgery();
// CORSを有効化 (2)
app.UseCors("AllowMauiApp");
// APIエンドポイントの追加 (3)
app.MapGet("/api/config", (IConfiguration configuration, ILogger<Program> logger) =>
{
logger.LogInformation("APIキーのリクエストを受信しました");
var apiKey = configuration["OpenAI:ApiKey"];
if (string.IsNullOrEmpty(apiKey))
{
return Results.NotFound("API key not configured");
}
return Results.Ok(new { ApiKey = apiKey });
});
~略~
CORS(Cross-Origin Resource Sharing)は、異なるオリジン(ドメインやポート)からのHTTPリクエストを制御する仕組みです。
MAUIアプリからWebサーバーへのアクセスはクロスオリジンとなるため、CORSポリシーを設定して許可しています(1)(2)。/api/configエンドポイントでは、ユーザーシークレットからAPIキーを読み込んで返します(3)。
また、ILogger<Program>を使って、リクエスト受信時にコンソールへメッセージを出力しています。コマンドラインからサーバーを起動した際に、アクセスの確認に役立ちます。
セキュリティに関する注意
今回実装したAPIエンドポイントは、開発環境向けの動作確認用です。本番環境では、次の対策が必要になるでしょう。
- 認証・認可の追加(JWT、APIキーなど)
- 接続元の限定許可
- サーバー側でOpenAI APIを呼び出し、画像をクライアントに返す設計
この記事は参考になりましたか?
- マルチターゲットアプリ開発の新しいアプローチ~.NET 9 新テンプレートの基本~連載記事一覧
-
- .NET MAUIアプリ構築で、より安全なプロキシ方式を実装する
- .NET MAUIアプリ構築で、APIキーをサーバーから安全に取得する
- .NET MAUI Blazorで生成した画像を保存する。ネイティブ機能との連携
- この記事の著者
-
WINGSプロジェクト 高江 賢(タカエ ケン)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
