SOAP 例を使用した Web サービス (WS) セキュリティ チュートリアル
WSセキュリティとは何ですか?
WS セキュリティは、Web サービスの一部としてデータが交換されるときのセキュリティに対処する標準です。これは SOAP の重要な機能であり、Web サービスの作成に SOAP が非常に普及している理由です。
セキュリティはあらゆる Web アプリケーションにとって重要な機能です。 ほとんどすべての Web アプリケーションがインターネットに公開されているため、Web アプリケーションに対するセキュリティ上の脅威が常に存在します。 したがって、Web ベースのアプリケーションを開発する場合は、セキュリティを念頭に置いてアプリケーションを設計および開発することを常にお勧めします。
セキュリティの脅威とその対策
Web アプリケーションにとって敵対的なセキュリティの脅威を理解するために、Web アプリケーションの簡単なシナリオを見て、セキュリティの観点からそれがどのように機能するかを見てみましょう。
HTTP で利用できるセキュリティ対策の XNUMX つは HTTPS プロトコルです。 HTTPS は、Web 上のクライアントとサーバー間の安全な通信方法です。 HTTPS は、安全な通信のために Secure Sockets Layer または SSL を利用します。 クライアントとサーバーの両方は、クライアントとサーバー間で通信が行われるときに、それ自体が本物であることを識別するためのデジタル証明書を持ちます。
クライアントとサーバー間の標準的なHTTPS通信では、次の手順が実行されます。
- クライアントは、クライアント証明書を介してサーバーにリクエストを送信します。 サーバーはクライアント証明書を確認すると、応答がこのクライアントにのみ返されるべきであることを認識できるように、キャッシュ システムにメモを作成します。
- 次に、サーバーは証明書を送信することでクライアントに対して自身を認証します。 これにより、クライアントが適切なサーバーと通信していることが保証されます。
- その後、クライアントとサーバー間のすべての通信は暗号化されます。 これにより、他のユーザーがセキュリティを破って必要なデータを取得しようとしても、データは暗号化されるため、読み取ることができなくなります。
ただし、上記の種類のセキュリティはすべての状況で機能するわけではありません。 クライアントが複数のサーバーと通信できる時代が来る可能性があります。 以下の例は、クライアントがデータベースと Web サーバーの両方と同時に通信することを示しています。 このような場合、すべての情報が https プロトコルを通過できるわけではありません。
ここで SOAP が活躍し、WS セキュリティ仕様を導入することでそのような障害を克服します。 この仕様では、すべてのセキュリティ関連データが SOAP ヘッダー要素で定義されます。
header要素には以下の情報を含めることができます。
- SOAP 本文内のメッセージがセキュリティ キーで署名されている場合、そのキーをヘッダー要素で定義できます。
- SOAP 本文内の要素が暗号化されている場合、ヘッダーには必要な暗号化キーが含まれているため、メッセージが宛先に到着したときに復号化できます。
複数サーバー環境では、上記の SOAP 認証のテクニックが次のように役立ちます。
- SOAP 本文は暗号化されているため、Web サービスをホストする Web サーバーによってのみ復号化できます。 これは、SOAP プロトコルの設計方法によるものです。
- メッセージが HTTP リクエストでデータベース サーバーに渡された場合、データベースには復号化するための適切なメカニズムがないため、メッセージを復号化できないとします。
- リクエストが SOAP プロトコルとして実際に Web サーバーに到達した場合にのみ、Web サーバーはメッセージを解読して、適切な応答をクライアントに送り返すことができます。
WS セキュリティ標準がどのように使用できるかについては、後続のトピックで説明します。 石鹸.
Webサービスのセキュリティ標準
前のセクションで説明したように、WS-Security 標準は、SOAP ヘッダーにセキュリティ定義を含めることを中心に展開しています。
SOAP ヘッダーの資格情報は 2 つの方法で管理されます。
まず、UsernameToken と呼ばれる特別な要素を定義します。 これは、ユーザー名とパスワードを Web サービスに渡すために使用されます。
もう 509 つの方法は、BinarySecurityToken 経由でバイナリ トークンを使用することです。 これは、Kerberos や X.XNUMX などの暗号化技術が使用される状況で使用されます。
以下の図は、WS Security でセキュリティ モデルがどのように機能するかの流れを示しています。
上記のワークフローで行われる手順は次のとおりです。
- リクエストは、Web サービス クライアントから Security Token Service に送信できます。 このサービスは、実際の SOAP Web サービスにユーザー名/パスワードまたは証明書を提供するために特別に構築された中間 Web サービスにすることができます。
- その後、セキュリティ トークンが Web サービス クライアントに渡されます。
- 次に、Web サービス クライアントは Web サービスを呼び出しますが、今度はセキュリティ トークンが SOAP メッセージに埋め込まれていることを確認します。
- その後、Web サービスは認証トークンを含む SOAP メッセージを理解し、セキュリティ トークン サービスに接続してセキュリティ トークンが本物かどうかを確認できます。
以下のスニペットは、WSDL ドキュメントの一部である認証部分の形式を示しています。 以下のスニペットに基づいて、SOAP メッセージには 2 つの追加要素が含まれます。XNUMX つはユーザー名、もう XNUMX つはパスワードです。
<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 Web サービスのセキュリティの例を見てみましょう。 SOAP の章で前に示した例に基づいて Web サービス セキュリティを構築し、それにセキュリティ層を追加します。
この例では、Web サービスを呼び出すアプリケーションに文字列を返すために使用される単純な 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 サービス名ファイルに Tutorial Service の名前を指定するだけです。
上記の手順を実行すると、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; } }
コードの説明:-
- 今、という名前の別のクラスを作成しています。 認証ヘッダー タイプはどれですか SoapHeader クラス。 SOAP ヘッダーで渡される内容を変更したい場合は、.Net の組み込み SoapHeader クラスを使用するクラスを作成する必要があります。 SOAP ヘッダーをカスタマイズすることにより、Web サービスの呼び出し時に「ユーザー名」と「パスワード」を渡すことができるようになりました。
- 次に、文字列型の変数「UserName」と「Password」を定義します。 これらは、Web サービスに渡されるユーザー名とパスワードの値を保持するために使用されます。
ステップ5) 次のステップとして、次のコードを同じものに追加する必要があります。 TutorialService.asmx ファイル。 このコードは実際に Web サービスの機能を定義します。 この関数は、文字列「これは Guru99 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); } eise return "This is a Guru99 Web service"; }
コードの説明:-
- ここでは、前の手順で作成した AuthHeader クラスのオブジェクトを作成しています。 このオブジェクトは Guru99Webサービス ユーザー名とパスワードを詳しく調べることができます。
- [SoapHeader] 属性は、Web サービスの呼び出し時にユーザー名とパスワードを渡す必要があることを指定するために使用されるようになりました。
- このコード ブロックでは、Web サービスの呼び出し時に渡されるユーザー名とパスワードを実際に調べています。 ユーザー名が「Guru99」、パスワードが「Guru99Password」の場合、「これは Guru99 Web サービスです」というメッセージがクライアントに渡されます。 それ以外の場合、間違ったユーザー ID とパスワードが渡されると、クライアントにエラーが送信されます。
コードが正常に実行された場合、ブラウザでコードを実行すると次の出力が表示されます。
出力:
上記の出力はプログラムを実行すると表示されます。これはWebサービスが利用可能になったことを意味します。サービスをクリックしてみましょう。 Descriptイオンリンク。
サービスの説明から、ユーザー名とパスワードがサービスの要素であることがわかります。 wsdl ファイル。 これらのパラメータは、Web サービスの呼び出し時に送信する必要があります。
Web サービスのセキュリティのベスト プラクティス
以下は、Webサービスを使用する際に注意すべきセキュリティ上の考慮事項です。
1. 監査とログ管理 – アプリケーション ログを使用して、Web サービスに送信されるすべてのリクエストをログに記録します。 これにより、Web サービスを呼び出したユーザーに関する詳細なレポートが得られ、セキュリティ侵害が発生した場合の影響分析に役立ちます。
2. Webサービス呼び出しの流れ – Web サービスの呼び出しの流れに注目してください。 デフォルトでは、アプリケーションは、これらの Web サービス間で渡される認証トークンを使用して、複数の Web サービス リクエストを呼び出すことができます。 Web サービス間のすべての呼び出しを監視し、記録する必要があります。
3.機密情報 – ログ エントリには、パスワードやクレジットカード番号などの機密情報や、その他の機密情報を含めないでください。これらの情報を含むイベントがある場合は、ログに記録する前に破棄する必要があります。
4. ビジネスの追跡 Operaン – 重要なビジネス オペレーションを追跡します。たとえば、特に機密性の高いメソッドやビジネス ロジックへのアクセスを記録するようにアプリケーションをインストルメント化します。オンライン ショッピング アプリケーションを例に挙げてみましょう。一般的なアプリケーションには、購入するアイテムの選択、カートにアイテムをロード、そして最終的な購入など、複数のステップがあります。このビジネス ワークフロー全体を Web サービスで追跡する必要があります。
5. 適切な認証 – 認証は、クライアントが ID を証明できる特定の資格情報のセットを使用して、Web サービスで自分の ID を確立できるメカニズムです。 ユーザー資格情報は決して保存すべきではないため、WS Security を使用して Web サービスを呼び出す場合は、Web サービスが SOAP ヘッダーで送信される資格情報を保存すべきではないことに注意する必要があります。 これらは Web サービスによって破棄される必要があります。
まとめ
- SOAP は、Web サービスの呼び出し時に追加のセキュリティを提供するために、WS セキュリティと呼ばれる追加の層を提供します。
- WS セキュリティは、単純なユーザー名またはパスワードを使用して呼び出すことも、認証用のバイナリ証明書とともに使用することもできます。
- 私たちはそれを見てきました 純 ユーザー名とパスワードが SOAP ヘッダー要素の一部として渡されるように Web サービスをカスタマイズできます。