OAuth in C# as a client
我已获得6位信息来访问网站上的某些数据:
现在,我研究了DotNetOpenAuth和OAuth.NET库,虽然我确定它们能够满足我的需要,但我只是想不通如何使用这种方式。 有人可以在任何一个库中(或可能同样起作用的任何其他方式)发布一些有关如何使用Url(第1点)的示例代码吗? 谢谢! 一个月前我也刚开始使用OAuth,所有这些库也让我感到困惑。我意识到这些库的一件事是它们非常复杂(如您所知)。另一个让我感到困难的是,没有太多示例(在我的情况下更糟糕,因为我试图实现提供者而不是客户)。 最初,我想使用最新的OAuth 2.0,但是唯一实现它的.NET库是DotNetOpenAuth。它可能是目前最完整的.NET OAuth库之一,但对我来说却花了很长时间(由于不了解WCF,MVC等)。此后,我已降级为OAuth 1.0a,因为我发现了DevDefined OAuth的这些示例。我不了解您,但是我发现从示例中学习变得容易。 您似乎只想实现一个Client,因此请确保查看Consumer示例。尝试编译示例,并忽略提供程序示例,因为您不需要它们,这会使您更加困惑。耐心点。如果您仍然感到困惑,最好查看一些为其他语言编写的库,因为它们可能更易于理解文档。 好吧,我知道您的最新帖子是几个月前的,但是如果您仍在从事此工作(或者对于像我一样希望看到该问题答案的人),以下是有关 空引用来自用于解析依赖关系的
这是使用静态方法和全局状态的众多陷阱之一,是您向API使用者隐藏了此类问题。因此,如果您未指定默认服务定位符,则会返回
因此,为了解决此问题,我连接了
生成的代码如下所示:
1 2 3 4 5 6 7 8 9 | var container = new Container(); container.Configure(a => a.For<INonceProvider>().Use<GuidNonceProvider>()); container.Configure(a => a.For<ISigningProvider>() .Use<HmacSha1SigningProvider>() .Named("signing.provider:HMAC-SHA1")); var locator = new StructureMapAdapter(container); ServiceLocator.SetLocatorProvider(delegate { return locator; }); |
我知道这不是您最初提出的问题的最终解决方案(我仍在努力使它自己解决),但我希望它可以使您进一步走下去。而且,如果您早已完全放弃了此实现,那么,无论如何,还是很高兴编写代码!
对于OAuth 2.0:
我了解到,最简单的方法是将身份验证页面放在HTML窗口中,然后捕获返回的access_token。然后,您可以在客户端Web浏览器中使用该功能。
例如,在MonoTouch中为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | // // Present the authentication page to the user // var authUrl ="http://www.example.com/authenticate"; _borwser.LoadRequest (new NSUrlRequest (new NSUrl (authUrl))); // // The user logged in an we have gotten an access_token // void Success(string access_token) { _web.RemoveFromSuperview(); var url ="http://www.example.com/data?access_token=" + access_token; // FETCH the URL as needed } // // Watch for the login // class Del : UIWebViewDelegate { public override void LoadingFinished (UIWebView webView) { try { var url = webView.Request.Url.AbsoluteString; var ci = url.LastIndexOf ("access_token="); if (ci > 0) { var code = url.Substring (ci +"access_token=".Length); _ui.Success (code); } } catch (Exception error) { Log.Error (error); } } } |