Я реализовал 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 из мыла, отправленного по сетевому проводу, сможет получить доступ к моему сервису.Как защитить мой сервис в этом сценарии?Пожалуйста, предоставьте мне решение, чтобы только выбранный клиент мог получить доступ к моей услуге.