SOAPを使用したWebサービス(WS)セキュリティの例
⚡ スマートサマリー
Webサービス(WS)セキュリティは、SOAP Webサービス呼び出し中に交換されるデータを保護するための標準規格です。この資料では、セキュリティ上の脅威と対策、WSセキュリティ規格、認証情報を使用した安全なWebサービスの構築方法、およびWebサービスセキュリティのベストプラクティスについて説明します。
WSセキュリティとは何ですか?
WS Securityは、Webサービスの一部としてデータが交換される際のセキュリティに関する標準規格です。これはSOAPの重要な機能であり、Webサービスの構築においてSOAPが非常に人気を集めている理由の一つです。
セキュリティはあらゆる Web アプリケーションにおいて重要な機能です。ほぼすべての Web アプリケーションはインターネットに公開されているため、Web アプリケーションには常にセキュリティ上の脅威が存在します。したがって、Web アプリケーションを開発する際には、ping ウェブベースのアプリケーションの場合、常にセキュリティを念頭に置いて設計および開発することが推奨されます。
セキュリティの脅威とその対策
ウェブアプリケーションにとって有害となりうるセキュリティ上の脅威を理解するために、ウェブアプリケーションの単純なシナリオを見て、セキュリティの観点からどのように機能するかを確認してみましょう。
HTTPで利用できるセキュリティ対策の一つにHTTPSプロトコルがあります。HTTPSは、Web上でクライアントとサーバー間の安全な通信を実現する方法です。HTTPSは、安全な通信のためにSSL(Secure Sockets Layer)を利用します。クライアントとサーバー間で通信が行われる際、両者はデジタル証明書を用いて互いの正当性を証明します。
クライアントとサーバー間の標準的なHTTPS通信では、以下の手順が実行されます。
- クライアントは、クライアント証明書を介してサーバーにリクエストを送信します。 サーバーはクライアント証明書を確認すると、応答がこのクライアントにのみ返されるべきであることを認識できるように、キャッシュ システムにメモを作成します。
- 次に、サーバーは証明書を送信することでクライアントに対して自身を認証します。 これにより、クライアントが適切なサーバーと通信していることが保証されます。
- それ以降、クライアントとサーバー間のすべての通信は暗号化されます。これにより、他のユーザーがセキュリティを破って必要なデータを入手しようとしても、データは暗号化されているため読み取ることができません。
しかし、上記のようなセキュリティ対策は、あらゆる状況で有効とは限りません。クライアントが複数のサーバーと通信する状況が発生する場合があります。以下の例では、クライアントがデータベースサーバーとWebサーバーの両方と同時に通信するケースを示しています。このような場合、すべての情報がHTTPSプロトコルを介して送信されるとは限りません。
ここでSOAPがWS Security仕様を導入することで、こうした障害を克服します。この仕様では、セキュリティ関連のすべてのデータがSOAPヘッダー要素で定義されます。ヘッダー要素には、以下の情報を含めることができます。
- SOAP 本文内のメッセージがセキュリティ キーで署名されている場合、そのキーをヘッダー要素で定義できます。
- SOAP本文内のいずれかの要素が暗号化されている場合、ヘッダーには必要な暗号化キーが含まれるため、メッセージが宛先に到達した際に復号化できます。
複数サーバー環境において、上記のSOAP認証技術は次のような点で役立ちます。
- SOAP 本文は暗号化されているため、Web サービスをホストする Web サーバーによってのみ復号化できます。 これは、SOAP プロトコルの設計方法によるものです。
- メッセージがHTTPリクエストでデータベースサーバーに渡されたとします。データベースには復号化するための適切なメカニズムがないため、メッセージを復号化することはできません。
- リクエストがSOAPプロトコルとして実際にWebサーバーに到達して初めて、サーバーはメッセージを解読し、適切な応答をクライアントに返信できるようになります。
以降のトピックでは、WS Security標準がどのように使用できるかを見ていきます。 石鹸.
Webサービスのセキュリティ標準
前述のセクションで説明したように、WS-Security 標準は、セキュリティ定義を SOAP ヘッダーに含めることを中心としています。SOAP ヘッダー内の認証情報は、2 つの方法で管理されます。
まず、UsernameToken と呼ばれる特別な要素を定義します。これは、ユーザー名とパスワードを Web サービスに渡すために使用されます。もう 1 つの方法は、BinarySecurityToken を介してバイナリ トークンを使用することです。これは、Kerberos や X.509 などの暗号化技術が使用される状況で使用されます。
以下の図は、WS Securityにおけるセキュリティモデルの仕組みの流れを示しています。
上記ワークフローで実行される手順は以下のとおりです。
- Webサービスクライアントからセキュリティトークンサービスへリクエストを送信できます。このサービスは、実際のSOAP Webサービスにユーザー名/パスワードまたは証明書を提供するように特別に構築された中間Webサービスです。
- その後、セキュリティ トークンが Web サービス クライアントに渡されます。
- 次に、WebサービスクライアントはWebサービスを呼び出しますが、このとき、セキュリティトークンがSOAPメッセージに埋め込まれていることを確認します。
- その後、Web サービスは認証トークンを含む SOAP メッセージを理解し、セキュリティ トークン サービスに接続してセキュリティ トークンが本物かどうかを確認できます。
以下のコードスニペットは、WSDLドキュメントに含まれる認証部分のフォーマットを示しています。このスニペットに基づくと、SOAPメッセージにはユーザー名とパスワードという2つの要素が追加されます。
<xs:element name="UsernameToken"> <xs:complexType> <xs:sequence> <xs:element ref="Username"/> <xs:element ref="Password" minOccurs="0"/> </xs:sequence> <xs:attribute name="Id" type="xs:ID"/> </xs:complexType> </xs:element>
SOAPメッセージがクライアントとサーバー間で実際にやり取りされる際、ユーザー認証情報を含むメッセージ部分は上記の図のようになります。wsse要素名はSOAP用に定義された特別な要素名であり、セキュリティ関連情報が含まれていることを意味します。
安全な Web サービスを構築する方法
それでは、SOAPウェブサービスのセキュリティ例を見ていきましょう。SOAPの章で先に説明した例を基に、ウェブサービスのセキュリティを構築し、そこにセキュリティ層を追加します。
今回の例では、呼び出し元のアプリケーションに文字列を返すシンプルなWebサービスを作成します。ただし、今回はWebサービスを呼び出す際に、呼び出し元のサービスに認証情報を提供する必要があります。以下の手順に従ってSOAP Webサービスを作成し、セキュリティ定義を追加しましょう。
ステップ1) 最初のステップは、空の Asp.Net Web アプリケーション。Visual Studio 2013 から、メニュー オプションの [ファイル] -> [新しいプロジェクト] をクリックします。
[新しいプロジェクト] オプションをクリックすると、Visual Studio はプロジェクトの種類を選択し、プロジェクトの必要な詳細を入力するための別のダイアログ ボックスを表示します。これについては次の手順で説明します。
ステップ2) このステップでは、
- 最初に選択していることを確認してください C# ASP.NET Webアプリケーション用のWebテンプレートです。Webサービスプロジェクトを作成するには、プロジェクトがこのタイプである必要があります。このオプションを選択すると、Visual StudioはWebベースのアプリケーションに必要なファイルを追加するための手順を実行します。
- プロジェクトに名前を付けます。この場合は「」とします。ウェブサービス.asmx次に、プロジェクトファイルが保存される場所を必ず指定してください。
完了すると、Visual Studio 2013 のソリューションエクスプローラーにプロジェクトファイルが作成されていることが表示されます。
ステップ3) このステップでは、Webサービスファイルをプロジェクトに追加します。
- まず、下図のようにプロジェクトファイルを右クリックします。
- プロジェクトファイルを右クリックすると、「追加」→「Webサービス(ASMX)」を選択してWebサービスファイルを追加できます。Webサービスファイル名には「チュートリアルサービス」という名前を入力してください。
上記の手順を実行するとダイアログボックスが表示されるので、そこにWebサービスファイルの名前を入力してください。下のダイアログボックスに、ファイル名として「TutorialService」と入力してください。
ステップ4) 次のコードを Tutorial Service asmx ファイルに追加します。以下のコード スニペットは、SOAP メッセージが生成されるときに SOAP ヘッダーを変更するために使用されるカスタム クラスを追加するために使用されます。SOAP ヘッダーにセキュリティ資格情報を追加するため、この手順は必須です。
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
Code 説明:
- 今、という名前の別のクラスを作成しています。 認証ヘッダー タイプはどれですか SoapHeader クラスSOAPヘッダーで渡される内容を変更したい場合は、.NETに組み込まれているSoapHeaderクラスを使用するクラスを作成する必要があります。SOAPヘッダーをカスタマイズすることで、Webサービス呼び出し時に「ユーザー名」と「パスワード」を渡せるようになります。
- 次に、文字列型の変数「UserName」と「Password」を定義します。 これらは、Web サービスに渡されるユーザー名とパスワードの値を保持するために使用されます。
ステップ5) 次のステップとして、次のコードを同じものに追加する必要があります。 TutorialService.asmx ファイルこのコードは実際にウェブサービスの機能を定義しています。この関数は「これは Guruクライアントには「99 Web サービス」と表示されます。ただし今回は、クライアント アプリケーションが Web サービスに認証情報を渡した場合にのみ文字列が返されます。
public class TutorialService : System.Web.Services.WebService { public AuthHeader Credentials; [SoapHeader("Credentials")] [WebMethod] public string Guru99WebService() { if (Credentials.UserName.ToLower() != "Guru99" || Credentials.Password.ToLower() != "Guru99Password") { throw new SoapException("Unauthorized", SoapException.ClientFaultCode); } else return "This is a Guru99 Web service"; }
Code 説明:
- ここでは、前の手順で作成した AuthHeader クラスのオブジェクトを作成しています。 このオブジェクトは Guru99Webサービス ユーザー名とパスワードを詳しく調べることができます。
- [SoapHeader] 属性は、Web サービスの呼び出し時にユーザー名とパスワードを渡す必要があることを指定するために使用されるようになりました。
- このコードブロックでは、Webサービスが呼び出されたときに渡されたユーザー名とパスワードを実際に調べています。ユーザー名が「Guru99」で、パスワードは「Guru「99Password」と入力すると、「これは Guru「99 Webサービス」がクライアントに渡されます。それ以外の場合は、ユーザーIDとパスワードが間違っている場合、エラーがクライアントに送信されます。
コードが正常に実行された場合、ブラウザでコードを実行すると次の出力が表示されます。
出力:
上記の出力はプログラム実行時に表示されるもので、Webサービスが利用可能になったことを意味します。それでは、「サービス」をクリックしてみましょう。 Descriptイオンリンク。
サービスの説明から、ユーザー名とパスワードがサービスの要素であることがわかります。 wsdl ファイル。 これらのパラメータは、Web サービスの呼び出し時に送信する必要があります。
Web サービスのセキュリティのベスト プラクティス
Webサービスを利用する際に留意すべきセキュリティ上の考慮事項は以下のとおりです。
- 監査およびログ管理 アプリケーションログを使用して、Webサービスへのすべてのリクエストをログに記録します。これにより、Webサービスを呼び出したユーザーに関する詳細なレポートが得られ、セキュリティ侵害が発生した場合の影響分析に役立ちます。
- ウェブサービスへの呼び出しの流れ ウェブサービス間の呼び出しの流れを把握するようにしてください。デフォルトでは、アプリケーションは複数のウェブサービスリクエストを呼び出し、認証トークンをこれらのウェブサービス間で受け渡すことができます。ウェブサービス間のすべての呼び出しを監視し、ログに記録する必要があります。
- 機密情報 パスワード、クレジットカード番号、その他の機密情報など、機密性の高い情報をログに記録しないでください。これらの情報が含まれているイベントが発生した場合は、ログに記録する前に破棄する必要があります。
- Trackビジネス Operaン – Track 重要なビジネスオペレーション。たとえば、特に機密性の高いメソッドやビジネスロジックへのアクセスを記録するようにアプリケーションを計測します。オンラインショップを例にとるとping アプリケーション。一般的なアプリケーションには、購入する商品の選択、カートへの商品のロード、そして最終的な購入など、複数のステップがあります。このビジネスワークフロー全体は、 tracウェブサービスによって提供されています。
- 適切な認証 認証とは、クライアントが特定の認証情報を用いてWebサービスに対して自身の身元を証明する仕組みです。ユーザー認証情報は決して保存すべきではありません。したがって、Webサービスを呼び出す際にWS Securityを使用する場合は、SOAPヘッダーで送信される認証情報をWebサービス側で保存してはならないことに注意が必要です。これらの認証情報はWebサービス側で破棄する必要があります。














