C#中的OAuth作为客户机
我得到了6位信息,可以访问网站上的一些数据:C#中的OAuth作为客户机,c#,.net,oauth,C#,.net,Oauth,我得到了6位信息,可以访问网站上的一些数据: 网站Json Url(例如:) OAuth授权Url(例如:) OAuth请求Url(例如:) OAuth访问Url(例如:) 客户端密钥(例如:12345678) 客户机密(例如:abcdefghijklmnop) 现在,我已经研究了DotNetOpenAuth和OAuth.NET库,虽然我确信它们能够满足我的需要,但我不知道如何以这种方式使用它们 是否有人可以发布一些示例代码,说明如何在任何一个库中使用Url(第1点)(或任何其他可能同样有效的方
//
// 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);
}
}
}
好的,我知道你上一篇文章是几个月前写的,但是如果你还在写这个(或者像我这样希望看到这个问题答案的人),下面是一些关于创建OAuth请求时遇到的
NullReferenceException
的信息:
空引用来自用于解析依赖关系的IServiceLocator。如果没有显式地将一个属性传递给构造函数,它将使用Microsoft.Practices.ServiceLocator
命名空间中的静态属性ServiceLocator.Current
这是使用静态方法和全局状态的众多陷阱之一,因为您对API的使用者隐藏了类似的问题。因此,如果尚未指定默认服务定位器,则返回null
,从而导致NullReferenceException
为了解决这个问题,我连接了一个IServiceLocator
的实现,它使用StructureMap(许多可用的IoC容器之一)作为容器。最后,您需要为两个接口注册实例:ISigningProvider
和INonceProvider
。幸运的是,OAuth.Net.Components程序集中存在几个标准实现,例如GuidNonceProvider和HmacSha1SigningProvider
生成的代码如下所示:
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; });
var container=newcontainer();
Configure(a=>a.For().Use());
Configure(a=>a.For())
.Use()
.命名(“签名提供商:HMAC-SHA1”);
var locator=新结构映射适配器(容器);
SetLocatorProvider(委托{return locator;});
我意识到这并不是你最初问题的最终解决方案(我自己仍在努力让它发挥作用),但我希望它能让你更进一步。如果您长期以来完全放弃了此实现。。。好吧,不管怎样,祝你编码愉快 我一个月前刚开始使用OAuth,对所有这些库也感到困惑。关于这些库我意识到的一件事是它们非常复杂(正如您所发现的)。另一件让它变得困难的事情是,没有太多的例子(在我的例子中更糟糕,因为我试图实现一个提供者而不是一个客户端) 最初,我想使用最新的OAuth 2.0,但实现它的唯一.NET库是DotNetOpenAuth。它可能是最完整的.NETOAuth库之一,但我要花很长时间才能理解(因为不知道WCF、MVC等)。我已经降级到OAuth 1.0a,因为我找到了这些。我不知道你的情况,但我发现从例子中学习更容易
看起来您只想实现一个客户机,所以请务必查看消费者示例。尝试编译示例并忽略提供程序示例,因为您不需要它们,这会让您更加困惑。耐心点。如果您仍然感到困惑,不妨看看为其他语言制作的一些库,因为它们可能更易于理解文档。谢谢,不幸的是,我正在使用oauth 1.0a,我在问题中忽略了提到它……对不起,忘了提一下这是在使用oauth 1.0a,我相信DotNetOpenAuth还不支持OAuth2.0。