私はIDispatchMessageInspector
を私のWCFサービスに実装して、以下のようなセキュリティを提供しています。WCFサービスでセキュリティを実装して、選択したクライアントだけが(各メソッドのuserid/passworkをチェックせずに)自分のサービスにアクセスできるようにする方法はありますか?
クライアント側コード:
private class mySecurityInspector : IClientMessageInspector, IDispatchMessageInspector
{
private const string HEADER_NS = "urn:myservice:authentication-header:2011";
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
MessageHeader<string> messageHeader = new MessageHeader<string>
(getAuthKeyFromConfig(), false, string.Empty, false);
// add the new header to our request
request.Headers.Add(messageHeader.GetUntypedHeader("",
HEADER_NS));
return null;
}
}
サーバー側(サービス):
private class mySecurityInspector: IDispatchMessageInspector
{
private const string HEADER_NS = "urn:myservice:authentication-header:2011";
public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request,
System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext
instanceContext)
{
string authKey = request.Headers.GetHeader<string>(“”, HEADER_NS);
if (authKey != getAuthKeyFromConfig())
{
throw new
Exception(string.Format(ServiceMessages.MSG_UNAUTHORISED_CLIENT,
"");
}
}
}
この方法では、authkeyを知っているクライアントは私のサービスにアクセスできます。これは私がやったことです。どういうわけか、ある人がハックすれば、セキュリティについては分かりません ネットワークワイヤーに向かう石鹸からのこのauthkeyが私のサービスにアクセスできるようになります。このシナリオで私のサービスを保護する方法は?選択したクライアントのみが自分のサービスにアクセスできるように、私にソリューションを提供してください。
私はWSHttpBindingを使用すると、古典的なASPアプリケーションは私のサービスを消費することができるでしょうか?私は確信していないので、私はbasicHttpBindingを使用しています。理由は、クライアントアプリケーションが自動的に設定ファイルから、または他の永続的なレイヤーとサービスからピックアップのauthkeyを有効にして、それを検証し、それに応じてアクションを実行するようにしたいということです。>>> –
いいえ。クラシックASPからサービスを呼び出す必要がある場合は、WSHttpBindingを使用しないでください。あなたのauthkeyを理解しているので、それはユーザー名とパスワードと同じです。あなたは、組み込みであり正確に同じ方法で動作するユーザー名パスワード機能を置き換えるカスタムソリューションを開発しました。 –