Webサーバー上でホストされているアプリケーションによって呼び出されるWCFサービスがあります(短期的には単一のWebサーバーのみが必要なため、スケーラビリティは無視されます)。問題)公開中のWCFの保護MVC2 App
Webサーバーは公開Webサイトを提供します。 example.com
WCFサービスは、とりわけ、ジョブを実行し、Webモデルでサポートされていない特定の管理機能、たとえば長時間実行されているデータベース操作を提供します。
WCFサービスは、互換モードを使用してAsp.Net http(s)パイプラインを利用するため、Webサイト内でホストする必要があります。具体的には、サービスは電子メールを生成し、電子メールはMVCを使用してテンプレート化されます。これの副作用の1つは、呼び出しで公開されているホスト名(例:https://example.com/JobService.svc
)を使用する必要があるため、電子メール内のリンクがlocalhost
などではなくexample.com
を指していることです。
明らかに、私はWCFサービスを保護したいと思っているので、一般の人々がジョブ/管理タスクを開始できないようにしたいと思います。
Asp.net httpパイプラインを使用しているため、バインディングのためにnet.tcpなどとは対照的にhttpsしか使用できません。
私は、適切なホスト名を使用できるように公的にアクセス可能なIPアドレスにバインドする必要があり(誰かがこれを回避する方法を知っている場合を除き?)
サーバがないように私は、Kerberos/NTLMを使用することはできません
The SSL settings for the service 'SslRequireCert' does not match those of the IIS 'None'.
NBを:私はかなり自体はHTTPSのみを経由して提供されるウェブサイトとしてこれを理解していないドメインに、それは文句として
私は、証明書を使用することはできません(とNTLMはとにかく弱いです)。 httpはhttps経由で同じページにリダイレクトします。
(興味深いのは、mexはhttps経由で提供されますが、WSDL内のURLはhttpを使用していますが、これはTLSを正しく設定できないという副作用であると仮定しています私のサービスだから、httpsでも応答してもhttpだと思っている)
私のサービスをどうやって保護するかについてのアイデアは不足しています。もちろん、サービス自体からリクエストを調べて、現在のサーバーで使用されているIPから来ているかどうかを判断できますが、これは非常に厄介であり、私は効果的に専門家の作業を無視して、場所 - 始めるにはとても良い場所ではありません。
誰でもこのサービスへのアクセスをローカルマシンのプロセスに限定する方法を提案できますか?
私は現在の設定を以下に添付しました。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="WebJobServiceHTTPBinding" openTimeout="00:10:00"
sendTimeout="00:10:00">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"
aspNetCompatibilityEnabled="true">
<serviceActivations>
<add relativeAddress="WebJob.svc"
service="MyApp.WebJobService"
factory="MyApp.WCFDIServiceHostFactory" />
</serviceActivations>
</serviceHostingEnvironment>
<services>
<service behaviorConfiguration="WebJobServiceBehavior" name="MyApp.WebJobService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="WebJobServiceHTTPBinding"
name="HTTPEndpoint" contract="MyApp.JobService.Common.IWebJobService" />
</service>
</services>
<standardEndpoints>
<mexEndpoint>
<standardEndpoint name="WebJobServiceMex" />
</mexEndpoint>
</standardEndpoints>
<behaviors>
<serviceBehaviors>
<behavior name="WebJobServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<serviceCertificate findValue="[Thumbprint of x509 cert used by website for SSL]"
storeName="Root" x509FindType="FindByThumbprint" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
あなたの答えをありがとうが、私が誤解しない限り、彼らは私の問題を解決しません。私は別のウェブサイトを使用することはできません - 私はあなたのウェブサイト上のユーザーの行動によって生成されたものと同じメールを私のWCFサービスから送ることができる必要があります。私はDRYではないので、各電子メールを2回定義する必要はありません。 127.0.0.1へのバインドは、私の質問(127.0.0.1 = localhost)で説明されている理由では機能しません。 – Basic