パブリック Web サービスとの間でデータを安全に送受信する方法
-
26-09-2019 - |
質問
私が開発中のアプリは、リモート ボックス上で実行されている既存のアプリケーションとインターフェイスします。リモート アプリとの通信は、パブリック Web サービスを介して行われます。安全に送信する必要がある機密データを処理するためにクライアントが Web サービスを利用する機能強化を構築するよう依頼されました。
誰かが私に最善の進め方についてアドバイスをくれませんか?
解決
まず、SSL を使用し、それを使用していないリクエストを拒否する必要があります。これにより、インターネット上で送信されるデータが暗号化されます。
SOAP を使用している場合は、ユーザー名/パスワードを受け取るカスタム ヘッダーをサービス内に定義できます。次に、各パブリック メソッドの最初の行で、ユーザー名とパスワードをデータベースと照合して検証します。成功した場合は、HttpContext.Current.User を適切に設定すると、サービスが組み込みの Asp.NET インフラストラクチャとうまく連携します。
追加した: 以下は、認証用のユーザー名とパスワードを含むサンプル SoapHeader です。
// define the header
public class AuthenticationHeader : SoapHeader
{
public String UserName { get; set; }
public String Password { get; set; }
}
// your service
public class PublicWebService : WebService
{
// defines an instance of the header as part of the service
public AuthenticationHeader Authentication;
private void Authenticate()
{
// validate the username / password against a database
// set the HttpContext.Current.User if successful.
// Maybe throw a SoapException() if authentication fails
}
// Notice the SoapHeader("Authentication") attribute...
// This tells ASP.Net to look for the incoming header for this method...
[WebMethod]
[SoapHeader("Authentication")]
public void PublicMethod1()
{
Authenticate();
// your code goes here
}
// Expose another method with the same authentication mechanism
[WebMethod]
[SoapHeader("Authentication")]
public void PublicMethod2()
{
Authenticate();
// your code goes here
}
}
ここで、wsdl ツールを実行すると、生成されたプロキシ クラスには、定義された認証ヘッダーが含まれます。
PublicWebService s = new PublicWebService();
s.Authentication = new AuthenticationHeader();
s.Authentication.UserName = "xxxxxxxx";
s.Authentication.Password = "yyyyyyyy";
s.PublicMethod1();
s.PublicMethod2();
他のヒント
DIYルート:
セキュリティについて読んでください (「」で始まる)秘密と嘘」などの一般書籍を参照してから、専門的な内容に進みます。
リスク分析とスレッド評価を実行します。何を、何から、そしてどこから脅威を保護しているのかを理解します。「高度なセキュリティ」は必要ないと思われます1.
TLS (別名 SSL) を使用します。
クライアントで、サーバーの証明書が正しいことを確認します。
より良いルート: あなたをサポートしてくれるという定評のある専門家を雇ってください。
1 本当に核兵器工場などを建設しているのでなければ。