ASMX Webサービスへのアクセスを制限する方法はありますか? asmxページとそのWSDL?
-
05-07-2019 - |
質問
アクセスを制限する必要があるC#.net Webサービスがあります。私はすでに、消費者にユーザー名とパスワードを使用してサービスを呼び出すことを要求しています。しかし、実際のasmxページとWSDLへのアクセスを制限する方法はありますか?ユーザー名/パスワードとIPアドレスでWebサービスへのアクセスを制限する必要があります。ユーザーが正しい資格情報を持っていなかった場合、Webサービスに存在するWebメソッドをユーザーに知らせたくありません。
これはIISで実行できますか? IISを介してIPアドレスを制限できることは知っていますが、ユーザー名/パスワードも使用できますか?
C#.netを使用して、IIS以外でこれを行う方法は他にありますか?
解決
まあ、それはASMXなので、ASP.NETランタイムスタック全体を自由に使用できます。
ステップ#1-.configによるリソースの管理
保護するリソースに<location>
タグを適用します。単一のASMXファイルであると仮定すると、web.configで次の操作を実行できます。
<location path="MyWebService.asmx">
<system.web>
<!-- resource specific options will go here -->
</system.web>
</location>
ステップ#2-ユーザーの認証
実際にユーザーを認証する方法を決定する必要があります。これを行う方法はいくつかあり、利用できる認証標準もいくつかあります。最適なアプローチを選択する必要があります。
イントラネット上でWindows認証を使用している場合、セットアップを行うための最も簡単なオプションであるため、それを活用することを強くお勧めします。ただし、インターネット経由でサービスにアクセスしている場合、Windows認証は実際にはオプションではないため、Web標準から選択する必要があります。最も簡単なものは基本認証ですが、これはのみ使用する必要がありますユーザー名/パスワードは暗号化されていない(base64エンコードのみ)ため、SSL経由で。それからの次のステップは、ダイジェスト認証です。ユーザー名/パスワードはMD5ハッシュを使用して送信されます。最終的には、 SSL v3 を使用して、特定のクライアント証明書を各ユーザーに発行できます。 API。
今、セキュリティ用にどのオプションを選択するかによって、他に何をする必要があるかが決まります。 Windowsセキュリティを選択する場合、ステップ#1で開始した<system.web>
要素に次の要素を追加するのと同じくらい簡単です。
<authentication mode="Windows" />
残りのセキュリティプロトコルでは、もう少し作業が必要になります。 ASP.NETは、Basic、Digest、またはSSL v3の本質的なサポートを提供しません。技術的には、IISを利用してこのタイプの認証を行うことができますが、常にWindowsユーザーにマッピングされます。それがあなたのためのオプションであるなら、単に<authentication mode="Windows" />
要素を残して、それに応じてIISを設定してください。ただし、IIS / ActiveDirectoryを単に制御できないため、またはカスタムユーザーデータベースに対して認証する必要があるため、それがオプションではない場合、カスタムHttpModuleをフックしてこれらのセキュリティをサポートする必要があることを意味しますプロトコル。
ステップ#3-リソースの保護
リソースを保護するための最も簡単なアプローチは、基本的に次のように言うことです。これは、次の許可構成を使用して行われます。
<authorization>
<deny users="?" />
</authorization>
特定のユーザーのみを許可する場合は、代わりに以下を実行するように変更できます。
<authorization>
<deny users="*" />
<allow users="jdoe, msmith" />
</authorization>
もう1つの方法は、ロール(グループ)を定義し、リソースにアクセスするユーザーを配置する特別なロールにリソースをロックダウンすることです。
<authorization>
<deny users="*" />
<allow roles="My Service Users" />
</authorization>
これは、Windowsグループをセットアップし、MISチームがActiveDirectoryを使用してそのグループに属するユーザーを管理できるようにするため、Windows認証にうまくマッピングされます。ただし、この機能は、使用したセキュリティ実装がIPrincipal実装を介してロールを公開することを前提として、Windows以外の認証でも正常に機能します。
他のヒント
2つのオプション:ロックダウンされたアクセス許可で、異なるポートにまったく異なるサイトを作成します。これには、ある程度の<!> quot;隠蔽によるセキュリティ<!> quot;を提供するという利点があります。 (半分冗談...)または、新しいアプリケーションをサイト(同じポート、異なるパス)の下で、異なるアプリプールに追加し、その方法でアクセス許可を割り当てることができます。
どちらの場合でも、WebサービスはさまざまなASP.NET <!> quot; things <!> quot;と通信できません。アプリケーションオブジェクトのように(まあ、しかしそれは同じものではありません)。展開は少し難しくなります。同じバイナリを展開しますが、1つのWebサービスファイルのみを含めます。
HttpModuleを使用して認証できます。 SSL + BasicAuthenticationは、他のツールチェーンとの最適な相互運用性をもたらすはずです。
HttpModuleでは、リクエストにアクセスでき、認証されていないユーザーが.asmxリクエストのみにアクセスすることを拒否できます。その場合でも、WSDLへのアクセスを許可できます。
web.configファイルの<add path="*.asmx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
セクションに<httpHandlers>
を追加します
これがどの程度実用的かはわかりませんが、WCFへのアップグレードを検討してください。 WCFはASMX Webサービスと完全な下位互換性があり、MEX(メタデータ交換)エンドポイントを定義することにより、WSDLを公開するかどうかを制御できます。 MEXエンドポイント、WSDLはありません。
Machine.configの要素からドキュメントプロトコルを削除することにより、WSDLの表示を停止できます
更新: Webサービス認証-ベストプラクティス ユーザーがユーザー名/パスワードを持っている場合、HTTPS経由のHTTP基本認証を使用できます。
わずかに異なる方法で実装することもできます。 Webサービスへの最初の呼び出しは、認証方法である必要があります。クライアントは認証トークンを認証して受け取ります。このトークンは、Webサービスによって公開される他のすべてのメソッドに提示される必要があります。