IDispatchMessageInspector
以下のようにセキュリティを提供するために、WCF サービスに実装しました。
クライアント側のコード:
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 を知っているクライアントだけが私のサービスにアクセスできます。これは私がやったことです。しかし、セキュリティについてはよくわかりません。何らかの方法で誰かがネットワーク ワイヤに向かう石鹸からこの認証キーをハッキングすると、私のサービスにアクセスできるようになると思います。このシナリオでサービスを保護するにはどうすればよいですか? 選択したクライアントのみが私のサービスにアクセスできるようにするための解決策を教えてください。