C# 通过ServiceStack加密消息
给定一个应用程序,该应用程序需要从中交换信息,如ConsumerKey/ConsumerCret for oAuthC# 通过ServiceStack加密消息,c#,.net,servicestack,C#,.net,servicestack,给定一个应用程序,该应用程序需要从中交换信息,如ConsumerKey/ConsumerCret for oAuth - server running "WebApi" over ServiceStack - consumer is a desktop app 希望使用已有的公钥/私钥对消息进行加密 是否支持对消息进行加密/解密(希望是透明的)?i、 e.加密/解密通过服务器上的过滤器进行处理 或 关于如何做到这一点,有什么解决办法吗 仅供参考-服务器已经需要SSL,并且请求经过身份验证,但是
- server running "WebApi" over ServiceStack
- consumer is a desktop app
希望使用已有的公钥/私钥对消息进行加密
是否支持对消息进行加密/解密(希望是透明的)?i、 e.加密/解密通过服务器上的过滤器进行处理
或
关于如何做到这一点,有什么解决办法吗
仅供参考-服务器已经需要SSL,并且请求经过身份验证,但是注册是免费/自动的,因此需要加密更新
现在发布的为所有服务提供安全通道,为现在可以通过不安全HTTP轻松发送和接收加密消息的客户端提供保护
目前还没有发布对内置在中的消息级加密的支持,尽管我们正在考虑将来添加这一功能。下面是一个示例,您今天可以尝试使用ServiceStack进行探索(这将需要您进行更多的研发,才能提出一个好的可靠设计),由于这是一个未来可能会发生变化的领域,我们现在不支持这一用例,但这里有一些东西可以像现在这样使用ServiceStack:
class EncryptedRequest
{
//Name of the request type
public string Type { get; set; }
//Serialized Request DTO using something like JSON
public string EncryptedBody { get; set; }
//optional: let server the private key that was used (if multiple)
public string PrivateKeyMd5Hash { get; set; }
}
class EncryptedResponse
{
//Name of the response type
public string Type { get; set; }
//Serialized Response DTO
public string EncryptedBody { get; set; }
//optional
public string PublicKeyMd5Hash { get; set; }
}
这是一个方便的方法,可以轻松创建公钥/私钥,并使用它们对文本进行加密/解密
然后,您可以使用单一服务,并执行以下操作:
class EncryptedService : Service
{
const string PublicKey = ...;
const string PrivateKey = ...;
EncryptedResponse Any(EncryptedRequest request)
{
var requestType = Type.GetType("{0}.{1}"
.Fmt(typeof(EncryptedRequest).Namespace, request.Type));
var json = CryptUtils.Decrypt(PrivateKey, request.EncryptedBody);
var requestDto = JsonSerializer.DeserializeFromString(json,requestType);
var responseDto = GetAppHost().Config.ServiceController
.Execute(requestDto, base.RequestContext);
return new EncryptedResponse {
Type = responseDto.GetType().Name,
EncryptedBody = CryptUtils.Encrypt(PublicKey, responseDto.ToJson()),
};
}
}
客户端还需要一份公钥/私钥对的副本,您可以在带外进行交换 GetAppHost().Config.ServiceController中的GetAppHost()未解析,看起来它已更改为GetResolver(),但无法使其工作!有什么建议吗?谢谢你只是需要投下它。这只是出于探索的目的,我将把其余的留给您去研究,因为我没有更多的时间花在这上面。@mythz自从您写了这篇文章以来,框架中有没有关于解密请求的更新内容?