通过 ServiceStack 加密消息

2024-02-29

给定一个应用程序需要交换 ConsumerKey/ConsumerSecret 等信息以获取 oAuth

- server running "WebApi" over ServiceStack
- consumer is a desktop app

希望使用已经存在的公钥/私钥来加密消息

是否有对加密/解密消息的支持,希望是透明的?即加密/解密是通过服务器上的过滤器处理的?

OR

有什么解决方法可以做到这一点吗?

仅供参考 - 服务器已经需要 SSL 并且请求经过身份验证,但是注册是免费/自动的,因此需要加密


Update

The 加密消息功能 https://github.com/ServiceStack/ServiceStack/wiki/Encrypted-Messaging发布于v4.0.42 https://github.com/ServiceStack/ServiceStack/blob/master/docs/2015/release-notes.md#v4042-release-notes现在为所有服务提供了一个安全通道,为现在可以通过不安全的 HTTP 轻松发送和接收加密消息的客户端提供保护。


没有发布对内置消息级加密的支持服务栈 http://www.servicestack.net目前,尽管这是我们正在考虑在未来添加的内容。下面是您现在可以尝试使用 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; } 
} 

这里有一个方便的CryptUtils 包装器 https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Common/CryptUtils.cs这使得创建公钥/私钥以及使用它们加密/解密文本变得容易。

然后你可以拥有一个服务,并执行以下操作:

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()), 
        }; 
    } 
} 

客户端还需要您将在带外交换的公钥/私钥对的副本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 ServiceStack 加密消息 的相关文章

  • ZedGraph 缩放和调整大小

    当我绘制图形 放大和缩小并重新绘制图形时 图形的位置不会改变 我想要做的是 每当重新绘制数据时 视图都会更改以查看所有图形数据 如果您在重绘之前放大或缩小 这似乎会被禁用 Thanks 设置属性 IsZoomOnMouseCenter对于控
  • 函数原型和数组参数

    我正在学习 C 语法 并且已经开始研究数组了 我想问你一个问题 但首先让我回顾一下 这样我就知道我已经弄清楚了 我知道您可以使用以下语法将变量定义为数组 name
  • 将 LINQ to Entities 查询中的每个项目转换为接口的最佳方法是什么?

    我有一个实现 IUser 的实体对象 User IQueryable
  • 优化对绑定到 DataGridView 的 DataTable 的更新

    我的应用程序中有一个显示一些数据的表单 当我第一次显示表单时 我将一些数据加载到 DataTable 中 然后将 DataTable 绑定到 DataGridView 我还启动了一个异步方法来执行一些较慢的数据库查询 当这些慢查询完成时 我
  • ResourceDictionary 源中的 Uri 语法(通用 Windows 平台)

    我正在迁移我的Windows 8 1项目到Windows 10 通用 Windows 平台 这时我被拦住了ResourceDictionary改变在UWP 为了简单起见 我有包含 2 个项目的 Windows 8 1 解决方案 App pr
  • 按位非运算符

    为什么要按位运算 0 打印 1 在二进制中 不是0应该是1 为什么 你实际上很接近 在二进制中 不是0应该是1 是的 当我们谈论一位时 这是绝对正确的 然而 一个int其值为0的实际上是32位全零 将所有 32 个 0 反转为 32 个 1
  • .NET 中 IEqualityComparer 中 GetHashCode 的作用是什么?

    我试图了解 IEqualityComparer 接口的 GetHashCode 方法的作用 下面的例子取自MSDN using System using System Collections Generic class Example st
  • 整数与双精度算术性能?

    我正在编写一个 C 类来使用整数执行 2D 可分离卷积 以获得比双对应更好的性能 问题是我没有获得真正的性能提升 这是 X 过滤器代码 对于 int 和 double 情况都有效 foreach pixel int value 0 for
  • “volatile void function( ... )” 做了什么?

    我见过从语法角度来看 C 函数中 volatile 关键字有多少种用法 https stackoverflow com questions 7643528 how many usage does volatile keyword have
  • 使用成员函数作为 std::shared_ptr 的自定义删除器时出现问题

    我正在尝试弄清楚如何将 std shared ptr 与自定义删除器一起使用 具体来说 我将其与 SDL Surface 一起使用 如下所示 std shared ptr
  • 使用 for 循环创建链表

    这是我的结构 struct ListItem int data struct ListItem next 假设链表的第一个节点的 data 0 我想编写一个 for 循环来创建大小为 5 的链表 但我不知道如何工作 我尝试了以下方法 int
  • 锁定文件的一个块

    我有一个大小为 192k 的文件 我想锁定文件的中间部分 例如 我想用 c 锁定文件的 64k 128k 知道如何锁定文件的那部分吗 你需要使用锁定文件Ex http msdn microsoft com en us library win
  • 如何忽略搜索条件中的空属性

    我有一个不好的要求要做 无论如何 我必须在我的应用程序中实现它 我有一个Track class public class Track public string Name get set public string City get set
  • 一些涉及类析构函数和删除运算符的内存管理问题?

    在阅读了一些教程后 我仍然不清楚 C 中内存管理的一些观点 1 当使用 new 运算符声明的类超出范围时 是否会调用其析构函数并释放内存 是否有必要调用删除运算符来释放类的内存并调用其析构函数 class Test void newTest
  • 一个对大文件有效的轻量级 XML 解析器?

    我需要解析潜在的巨大 XML 文件 所以我猜这排除了 DOM 解析器 是否有任何优秀的 C 轻量级 SAX 解析器 在占用空间上可与 TinyXML 相媲美 XML的结构非常简单 不需要诸如命名空间和DTD之类的高级东西 只是元素 属性和
  • C语言中如何将整数转换为字符? [复制]

    这个问题在这里已经有答案了 C语言中如何将整数转换为字符 C 中的字符已经是数字 字符的 ASCII 代码 无需转换 如果要将数字转换为相应的字符 只需添加 0 即可 c i 0 0 是 ASCii 表中的一个字符
  • C# 编译器编译 .txt .obj .java 文件

    using System class Program public static void Main Console WriteLine Hello World Console ReadLine 我将文件另存为1 java 2 obj an
  • 字符串常量之前应有非限定 ID

    我目前正在编写一个 C 应用程序 它与 math h 结合实现了振荡器 我拥有的代码应该可以很好地用于该应用程序 尝试编译目标文件 但是我遇到编译器错误 很可能与语法 等有关 我认为这与命名空间有关 错误 终端输出 User Name Ma
  • Selenium WebDriver 在按钮单击事件上无法正常工作。这里有什么问题呢?

    I am using following code to scrape data from a website I have following interface 这是 HTML div class es content div
  • 如何使用字符串的值将字符串转换为 wstring?

    我是 C 新手 我有这个问题 我有一个名为 DATA DIR 的字符串 需要将其格式化为 wstring string str DATA DIR std wstring temp L s str Visual Studio 告诉我没有与参数

随机推荐

  • 关于 Oracle 12c 中的用户

    我的系统上安装了 Oracle 12c 数据库 我有一个需要访问数据库的应用程序 以前在Oracle 11g中 我使用以下命令来创建用户 create user name identified by name grant connect c
  • 使用 HealthKit 后台传递检索步骤后,在后台将数据写入 Firebase

    我有一个HKObserverQuery设置在后台获取步骤 enableBackgroundDelivery方法被调用在application didFinishLaunchingWithOptions 这些步骤是在后台检索的 但我还想将检索
  • MVC 的替代方案是什么?

    似乎我正在进行的每个项目都使用模型视图控制器架构 这就是我滚动自己的项目的方式 还有其他选择吗 否则如何创建一个具有持久存储和用户界面的应用程序呢 MVC http en wikipedia org wiki Model view cont
  • 有没有办法在没有扩展名的情况下从express提供静态html文件?

    我想提供一个 html 文件而不指定它的扩展名 有什么办法可以在不定义路线的情况下做到这一点吗 例如代替 helloworld html 我想做的就是 helloworld 您可以在express static方法中使用扩展选项 app u
  • WinForms:加载本地化帮助 (chm) 文件

    加载特定于区域设置 即已翻译 的已编译帮助文件 chm 的最佳方法是什么 我们的安装会将它们与包含资源的卫星程序集一起部署 我想重复使用 NET 框架用于加载卫星程序集的相同探测规则 并且我绝对希望避免编写自己的搜索算法 因为例如 我必须处
  • 如何在Eclipse中浏览包含源代码的jar文件中的源代码?

    我有一个包含源代码的 jar 文件 如何在 Eclipse 中浏览该源代码 目前 我的 Eclipse 在文本编辑器中打开 jar 文件 但它并没有那么有用 当我查看首选项 常规 gt 编辑器 gt 文件关联 时 我没有关联 jar如果我查
  • INSERT INTO 失败且没有错误

    我正在尝试使用 PHP 和 Mysql 进行 INSERT INTO 这是 SQL 语句 在 PHPMyadmin 中成功 INSERT INTO purchase orders VALUES DEFAULT 501 80999 14917
  • 使用带参数的访问查询导出为文本

    问候 我有一个访问查询 它使用内置参数 例如 开始日期 来提示用户在运行查询时输入日期参数 在大多数情况下 这工作得很好 但今天我尝试将查询导出到文本文件 但收到错误 参数太少 预计2 这是有道理的 因为查询 开始日期 和 停止日期 中有两
  • 避免 Django def post 在保存时重复

    您好 我在保存时遇到重复对象的问题 我怎样才能防止这种情况发生 提前致谢 models py class Candidate models Model user models OneToOneField User primary key T
  • 如果每个条件都做 Rails

    您好 我需要打印出 active 为 0 的候选者 这是我在视图中的代码 如果 active 是或否 我可以打印 但是在每个 do 循环中 我只想打印活动候选者 So how can i add the condition to my ea
  • MVC5 - 如何在 DropDownListFor Html 帮助器中设置“selectedValue”

    正如问题所说 如何在 DropDownListFor Html 帮助器中设置 selectedValue 尝试了大多数其他解决方案 但没有一个有效 这就是我提出一个新问题的原因 这些都没有帮助 Html DropDownListFor m
  • 使用Webview在iPhone中查看.doc、.docx、.rtf、.ppt文件

    我想在 iPhone 中查看 doc docx rtf ppt 文件 但我猜我这边出了问题 它不适用于上述格式 但我的代码对于 txt 和 pdf 文件工作正常 我已阅读有关 Webview 的文档 它指出它支持查看上述文档 下面是我的 d
  • 在 R 中执行行之间的计算

    我试图弄清楚如何跨行 或行之间 进行计算 我尝试过查找此内容 但显然我的 Google Fu 今天并不强大 因为我只是找不到正确的搜索词 这是我要处理的数据类型的超级简化示例 mydf lt data frame pair rep 1 2
  • Linkedin API 用户分享统计

    也许我错过了有关 LinkedIn API 端点的一些信息 但在我看来 Linkedin API 没有端点 URL个人资料 墙 发布的帖子统计 喜欢 评论 甚至有机搜索统计数据 展示次数 点击次数 参与度 这很奇怪 因为公司 API 对于其
  • 连接被拒绝! selenium 服务器是否在边缘启动了 nightwatch

    我已经创建了一个项目 它是一个 vue js 应用程序 有一小部分单元测试 玩笑 和一个端到端测试 夜更 当我尝试使用 npm 运行端到端测试时 我得到 Error retrieving a new session from the sel
  • 在Delphi中使用接口有哪些优点和缺点?

    我已经使用 Delphi 类有一段时间了 但从未真正开始使用接口 我已经读过一些关于它们的内容 但想了解更多 我想听听您在使用 Delphi 中的接口时遇到的优点和缺点 包括编码 性能 可维护性 代码清晰度 层分离以及一般而言您能想到的任何
  • 浏览器兼容自动换行和空格:pre?

    我需要保留并换行 div 中的文本 到目前为止 我很难找到解决方案 我找到的最佳解决方案并不适用于所有浏览器 以下内容适用于 Chrome 和 IE6 但在 Firefox 中文本不换行 white space pre word wrap
  • Spring可缓存异步更新,同时返回旧缓存

    有休息控制器 它调用 Cacheable方法来自 Service My CacheManager has expireAfterWrite超时 所以超时后使用rest gt service方法时 必须重写缓存 但问题是 如果同时有许多剩余调
  • 从列表框中选定的项目中提取内容 (urwid)

    我正在 urwid 中创建一个列表框 其中每个项目都是从 URL 列表中提取的 URL 当选择一个项目并单击 ENTER 时 我想提取 URL 并在浏览器中打开它 到目前为止 这是我的代码 class SelectableText urwi
  • 通过 ServiceStack 加密消息

    给定一个应用程序需要交换 ConsumerKey ConsumerSecret 等信息以获取 oAuth server running WebApi over ServiceStack consumer is a desktop app 希