クライアント証明書によって要求を認証するように asp.net Web API サービスを構成する際に問題があります
Pro ASP.NET Web Api Security で説明されている手順を実行します。
- makecert.exe を使用して証明書を作成し
makecert.exe -r -n "CN=MobileTradeDataGateway" -pe -sv MobileTradeDataGateway.pvk -a sha256 -cy authority MobileTradeDataGateway.cer
、makecert.exe -iv MobileTradeDataGateway.pvk -ic MobileTradeDataGateway.cer -n "CN=DataGateway1" -pe -sv DataGateway1.pvk -a sha256 -sky exchange DataGateway1.cer -eku 1.3.6.1.5.5.7.3.2
- サーバーの信頼されたルート証明機関とクライアントにも MobileTradeDataGateway 証明書をインストールします。DataGateway1 をクライアント個人権限にインストールします。
- 証明書を受け入れて有効にするようにサイトを構成します。匿名認証を有効にします。
- DelegatingHandler を作成し、それを mvc の messagehandlers コレクションに追加して、証明書を確認します。
Web API メソッドを呼び出す
var certStore = new X509Store(StoreLocation.CurrentUser); certStore.Open(OpenFlags.ReadOnly); var collection = certStore.Certificates.Find(X509FindType.FindByIssuerName, "MobileTradeDataGateway", true); var cert = コレクション [0]; certStore.Close(); var messageHandler = new WebRequestHandler(); messageHandler.ClientCertificates.Add(証明書); var client = new HttpClient(messageHandler) { BaseAddress = new Uri("...") }; var res = client.GetAsync("/api/orderuploader?number=5").Result;
.
私のマシンがサーバーであるローカルマシンとネットワークでは、すべてが正常に機能します。しかし、Azure クラウド サービスにデプロイすると
var cert = request.GetClientCertificate(); // here is null
、カスタム委任ハンドラーでnull が取得されます
もちろん、IIS が証明書を受け入れ、信頼されたルート証明機関に証明書を正しく配置できるようにします。
何か案は?