Wcf-security
WCF-セキュリティ
WCFサービスは、2つのセキュリティモードまたはレベルを備えた堅牢なセキュリティシステムを備えているため、目的のクライアントのみがサービスにアクセスできます。 分散トランザクションで一般的なセキュリティの脅威は、WCFによって大幅に緩和されます。
主なセキュリティ機能
WCFサービスには、次の図に示す4つの主要なセキュリティ機能があります。
- 認証-ここでは、認証はメッセージの送信者を識別することに限定されず、相互に行われます。つまり、あらゆる種類の中間者攻撃の可能性を排除するためにメッセージ受信者の認証が必要です。
- 承認-これは、セキュリティを確保するためにWCFサービスによって行われる次のステップであり、ここで、サービスが発信者にさらに進むことを承認するかどうかを決定します。 承認は認証に依存しませんが、通常は認証に従います。
- 機密性-発信者とサービスの間の情報交換は、メッセージが意図されていない他者による解釈を制限するために機密に保たれます。 これを可能にするために、暗号化はさまざまな他のメカニズムとともに使用されます。
- 整合性-最後の重要な概念は、整合性を維持することです。つまり、メッセージが送信者から受信者への移動中に誰にも改ざんされていないことを保証します。
転送セキュリティモード
WCFは、クライアントとサーバー間の安全な通信を確保するために、次の転送セキュリティモードを提供します。 さまざまな転送セキュリティモードについて以下に説明します。
- なし-このモードは、いかなる種類のメッセージセキュリティも保証せず、サービスはクライアントに関する資格情報を取得しません。 このモードは、メッセージの改ざんを許可する可能性があるため、非常にリスクが高いため、お勧めしません。
<wsHttpBinding>
<binding name = "WCFSecurityExample">
<security mode = "None"/>
</binding>
</wsHttpBinding>
- Transport -このモードは、TCP、IPC、Https、MSMQなどの通信プロトコルを使用してメッセージの安全な転送を実現する最も簡単な方法です。 このモードは、転送がポイントツーポイントであり、主に制御された環境、つまりイントラネットアプリケーションで使用される場合により効果的です。
<wsHttpBinding>
<binding name = "WCFSecurityExample">
<security mode = "Transport"/>
</binding>
</wsHttpBinding>
- メッセージ-セキュリティモードは相互認証を許可し、メッセージが暗号化され、安全なプロトコルとは見なされないhttpを介して転送できるため、プライバシーを大幅に提供します。 ここでは、メッセージ転送に関与する仲介者の数や、保護されたトランスポートがあるかどうかを考慮せずに、セキュリティがエンドツーエンドで提供されます。 このモードは通常、インターネットアプリケーションで使用されます。
<wsHttpBinding>
<binding name = "WCFSecurityExample">
<security mode = "Message"/>
</binding>
</wsHttpBinding>
- 混合-このセキュリティモードは頻繁には使用されず、クライアント認証はクライアントレベルでのみ提供されます。
<wsHttpBinding>
<binding name = "WCFSecurityExample">
<security mode = "TransportWithMessageCredential"/>
</binding>
</wsHttpBinding>
- 両方-このセキュリティモードは、トランスポートセキュリティとメッセージセキュリティの両方で構成され、堅牢なセキュリティカバーを提供しますが、多くの場合、全体的なパフォーマンスが過負荷になります。 これはMSMQのみでサポートされています。
<netMsmqBinding>
<binding name = "WCFSecurityExample">
<security mode = "Both"/>
</binding>
</netMsmqBinding>
BasicHttpBindingを除くすべてのWCFバインディングには、デフォルトである程度の転送セキュリティがあります。
メッセージセキュリティレベル
メッセージレベルのセキュリティは、WCFプロトコルに依存しません。 標準のアルゴリズムを使用してデータを暗号化することにより、メッセージデータ自体で使用されます。 メッセージセキュリティレベルのさまざまなバインディングには、多くのクライアント資格情報が利用可能です。これらについては以下で説明します。
- WCFのメッセージレベルセキュリティのクライアント資格情報*
なし-ここでは、暗号化はメッセージを保護するために使用されますが、クライアント認証は実行されません。つまり、匿名クライアントはサービスにアクセスできます。 BasicHttpBindingを除き、すべてのWCFバインディングはこのクライアント資格情報をサポートします。 ただし、NetNamedPipeBindingの場合、このクライアント資格情報はまったく使用できないことに注意してください。
- Windows -ここでは、リアルタイムのログインユーザーに対してメッセージ暗号化とクライアント認証の両方が行われます。 この場合も、他のすべてのWCFバインディングとは異なり、NetNamedPipeBindingは使用できず、BasicHttpBindingはサポートを提供しません。
- UserName -ここでは、メッセージはUserNameを提供することで暗号化およびセキュリティ保護され、クライアントはパスワードを提供する必要があるため認証されます。 上記の2つのクライアント資格情報と同様に、BasicHttpBindingはUserNameをサポートせず、NetNamedPipeBindingでは使用できません。
- 証明書-メッセージの暗号化に加えて、クライアントとサービスの両方が証明書による認証を取得します。 このクライアント資格情報は利用可能であり、NetNamedPipeBindingを除くすべてのWCFバインディングによってサポートされています。
- IssuedToken -Cardspaceなどの機関から発行されたトークンは、メッセージの認証に使用されます。 メッセージの暗号化もここで実行されます。
次のコードは、WCFメッセージセキュリティレベル/モードでクライアント資格情報がどのように構成されているかを示しています。
<netTcpBinding>
<binding name = "WCFMessageSecurityExample">
<security mode = "Message">
<message clientCredentialType = "None"/>
</security>
</binding>
</netTcpBinding>
<netMsmqBinding>...</netMsmqBinding>
</bindings>
<behaviors>...</behaviors>
ここで、前者の方が高速であるため、トランスポートセキュリティモードはメッセージセキュリティレベルよりも優れていることに注意する必要があります。 追加のコーディングを必要とせず、相互運用性をサポートするため、全体的なパフォーマンスが低下することはありません。
ただし、セキュリティの観点から見ると、メッセージセキュリティモードはより堅牢で、プロトコルに依存せず、エンドツーエンドのセキュリティを提供します。