Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中的OAuth作为客户机_C#_.net_Oauth - Fatal编程技术网

C#中的OAuth作为客户机

C#中的OAuth作为客户机,c#,.net,oauth,C#,.net,Oauth,我得到了6位信息,可以访问网站上的一些数据: 网站Json Url(例如:) OAuth授权Url(例如:) OAuth请求Url(例如:) OAuth访问Url(例如:) 客户端密钥(例如:12345678) 客户机密(例如:abcdefghijklmnop) 现在,我已经研究了DotNetOpenAuth和OAuth.NET库,虽然我确信它们能够满足我的需要,但我不知道如何以这种方式使用它们 是否有人可以发布一些示例代码,说明如何在任何一个库中使用Url(第1点)(或任何其他可能同样有效的方

我得到了6位信息,可以访问网站上的一些数据:

  • 网站Json Url(例如:)
  • OAuth授权Url(例如:)
  • OAuth请求Url(例如:)
  • OAuth访问Url(例如:)
  • 客户端密钥(例如:12345678)
  • 客户机密(例如:abcdefghijklmnop)
  • 现在,我已经研究了DotNetOpenAuth和OAuth.NET库,虽然我确信它们能够满足我的需要,但我不知道如何以这种方式使用它们

    是否有人可以发布一些示例代码,说明如何在任何一个库中使用Url(第1点)(或任何其他可能同样有效的方式)

    谢谢

    对于OAuth 2.0:

    我了解到,最简单的方法是在HTML窗口中设置身份验证页面,然后捕获返回的访问令牌。然后,您可以在客户端web浏览器中执行此操作

    例如,在MonoTouch中,它将是:

    //
    // 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。