Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9551

【C#/ASP.NET Web API】ASP.NET Web APIにHTTPSを適用する手順

$
0
0
概要 ASP.NET Web APIにHTTPSを適用して、IIS Express上で動作確認する。 動作環境 IDE Visual Studio Community 2017 15.9.36 ・ ASP.NET and Web Tools 2017 15.9.04012.0 ・ ASP.NET Core Razor Language Services 15.8.31590 ・ ASP.NET Web Frameworks and Tools 5.2.61435.0 Application ASP.NET Webアプリケーション(.NET Framework) ・ C#/Web API ブラウザ Google Chrome 91.0.4472.164 全体の流れ 評価用APIを作成する。 AuthorizationFilterAttributeを継承したカスタムフィルタクラスを定義する。 カスタムフィルタをAPIConfigに登録する。 makecert.exeを用いてテスト用のクライアント証明証を作成する。 Visual Studioの開発サーバのHTTPSサーポートの有効化する 。 IIS ExpressでHTTPS接続の動作確認する 。 評価用APIを作成する データモデルクラスを定義する Product.cs namespace WebServer.Models { /// <summary> /// 製品 /// </summary> public class Product { /// <summary> /// ID /// </summary> public int Id { get; set; } /// <summary> /// 名前 /// </summary> public string Name { get; set; } /// <summary> /// 価格 /// </summary> public decimal Price { get; set; } /// <summary> /// カテゴリー /// </summary> public string Category { get; set; } } } コントローラを定義する ProductsController.cs using System; using System.Linq; using System.Web.Http; using WebServer.Models; namespace WebServer.Controllers { /// <summary> /// 製品のイベントハンドラ /// </summary> public class ProductsController : ApiController { /// <summary> /// 製品情報 /// </summary> private static Product[] _products = new Product[] { new Product {Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1}, new Product {Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M}, new Product {Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M} }; /// <summary> /// 製品情報をすべて取得する /// </summary> /// <returns></returns> public IHttpActionResult GetAllProducts() { return Ok(_products); } } } AuthorizationFilterAttributeを継承したカスタムフィルタクラスを定義する RequireHttpsAttribute.cs using System; using System.Net; using System.Net.Http; using System.Web.Http.Controllers; using System.Web.Http.Filters; namespace WebServer { /// <summary> /// HTTPSの認証フィルタ(カスタムクラス) /// </summary> public class RequireHttpsAttribute : AuthorizationFilterAttribute { /// <summary> /// 認証時に呼び出されるコールバック関数 /// </summary> /// <param name="actionContext"></param> public override void OnAuthorization( HttpActionContext actionContext ) { if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps) { actionContext.Response = new HttpResponseMessage(HttpStatusCode.Forbidden) { ReasonPhrase = "HTTPS Required" }; } else { base.OnAuthorization(actionContext); } } } } カスタムフィルタをApiConfigに登録する グローバルな設定として、HTTPSフィルタを適用する。すべてのWeb APIがHTTPS適用となる。 config.Filters.Add(new RequireHttpsAttribute()); WebApiConfig.cs using System.Web.Http; namespace WebServer { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API の設定およびサービス // Web API ルート config.MapHttpAttributeRoutes(); // HTTPSフィルターを登録する(すべてのWeb APIがHTTPS実行となる) config.Filters.Add(new RequireHttpsAttribute()); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } } makecert.exeを用いてテスト用のクライアント証明証を作成 makecert.exeの格納場所 私の環境だと、下記フォルダ内に格納されていた。 ・ C:\Program Files (x86)\Windows Kits\10\bin ・ C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\microsoft.windows.sdk.buildtools 今回はVisual Studio直下にmakecert.exeを使用する。 テストルート証明期間を作成 (1)Visual Studioの開発者コマンドプロンプトを「管理者権限」で実行する。 (2)下記コマンドを実行する。 makecert.exe -n "CN=Development CA" -r -sv C:\Workspace\TempCA.pvk C:\Workspace\TempCA.cer ※出力パス、ファイル名は任意。 (3)パスワードを入力する。 (4)コマンドプロンプトに[Succeeded]が表示されることを確認する。 証明書をインストールする ローカルマシンに下記手順で証明書をインストールする。 (1)MMCを開く。 (2)[ファイル] で、 [スナップインの追加と削除] を選択する。 (3)利用可能なスナップインから証明書を選択する。 (4)[追加]ボタンをクリックする。 (5)[ローカルコンピュータアカウント]を選択する。 (6)[次へ]をクリックする。下記画面で[完了]をクリックする。 (7)[OK]を押して、 [スナップインの追加と削除] を閉じる。 (8)[証明書]が下記のように追加される。 (9)[証明書]を展開して、「信頼されたルート証明機関」を選択する。 (10)[すべてのタスク]から[インポート]を選択する。 (11)証明書インポートウィザードが立ち上がる。「次へ」を押す。 (12)証明書を選択して、[次へ]を押す。 (13)[次へ]を押す。 (14)[完了]を押す。 (15)[OK]を押す。 Visual Studioの開発サーバのHTTPSサーポートの有効化 (1)VisualStudioでWeb APIソリューションを開く。 (2)ソリューションエクスプローラで[Web APIプロジェクト]を選択する。 (3)「プロパティウィンドウ」を表示する。 (4)開発サーバのタブを展開して、[SSL有効化]を[True]にする。 SSL URLはHTTPS接続テストに使用するため、控えておく。 IIS ExpressでHTTPS接続を動作テストする HttpでWeb APIのGetメソッドをコールする URL http://localhost:59320/api/products 実行結果:アクセスを拒否される HttpSでWeb APIのGetメソッドをコールする URL https://localhost:44333/api/products 実行結果:Web APIのGetメソッドに成功する 参考にしたサイト No リンク 概要 1 httpsとは?htttpとの違いとSSL暗号化の仕組み httpsの仕組みに関する解説が分かりやすい 2 C# Corner How To Enable HTTPS In ASP.NET Web API ASP.NET Web APIにHTTPSを適用する手順の記事(英語) 3 MicrosoftDoc Web APIでのSSL操作 公式ドキュメントのSSL操作に関する記事

Viewing all articles
Browse latest Browse all 9551

Trending Articles