如何扩展DotNetOpenAuth库以与OAuth 1.0一起使用以使用特殊的serviceprovider

时间:2014-01-08 13:29:04

标签: .net authentication oauth authorization dotnetopenauth

我目前正在尝试使用DotNetOpenAuth 1个消费者与需要一些特殊适应的服务提供商集成。 serviceprovider(VitaDock)要求:

1)使用HMAC-SHA256计算的消息签名 2)请求中不得出现回调参数 3)不提供callback_confirmation 4)时间戳是自1月1日以来的毫秒数。 (而不是秒) 5)不应使用领域参数 6)Nonce为36个字符

通过实现这两个新类,我设法获得了一个简单的工作解决方案 1)VitaDockConsumer继承自MessageNetandler,继承自DotNetOpenAuth.OAuth.Consumer和 2)继承自DotNetOpenAuth.OAuth.OAuth1HttpMessageHandlerBase的VitaDockMessageHandler

我的问题是:

1)我的解决方案“感觉很脏”,因为它打破了DRY(不要重复自己 - 或者在这种情况下不要重复别人)原则。在基类中有许多有用的辅助方法来处理编码等,但由于它们被定义为私有,内部或受保护,我无法利用,因此我发现自己需要两次实现相同的功能或直接复制。我的问题是:是否有其他途径可以实现这一目标。我应该扩展其他类吗?其他模式?

2)我能想出解决方案的唯一方法是使用指定毫秒而不是秒的时间戳,方法是更改​​库中的OAuth1HttpMessageHandlerBase.cs。我的问题是:还有另一种方法吗?

我是DotNetOpenAuth的新手,所以非常感谢所有帮助。我正在考虑一条路由是否可以提供新版本的OAuth1MessageHanderBase,其中时间戳和其他帮助函数是公共的,还是有充分的理由将这些辅助方法保密:

我没有发布我的代码,因为它长达700多行,但如果需要的话,当然会乐意这样做。

1 个答案:

答案 0 :(得分:0)

经过一番调查......我终于找到了让DotNetOpenAuth与VitaDock合作的方法。我选择扩展Oauth1 MessageHandler并进行各种更改以使此提供程序兼容。

如果您遇到类似问题,可能需要查看我的更改DNOA的解决方案

https://github.com/DotNetOpenAuth/DotNetOpenAuth/pull/321

以及一个显示如何在VitaDock中使用DNOA的小例子。它可以从VitaDock门户获得温度读数。它可以很容易地扩展到接收其他信息。

https://github.com/karstenols/VitaDock-DNOA-Sample