【问题标题】:Has anybody implemented 2 Legged OAuth using DNOA?有人使用 DNOA 实现了 2 Legged OAuth 吗?
【发布时间】:2011-03-03 06:01:00
【问题描述】:

我正在尝试在 CSharp 中创建一个身份验证模块,我需要使用 DotNetOpenAuth(DNOA) 库验证请求中的签名,用于 2 Legged OAuth,它只有消费者密钥和一个秘密。

如果您有任何使用 DNOA 的 2 Legged OAuth 示例实现,那将会很有帮助。 如果没有,任何关于如何实施的想法也将起作用。 任何帮助将不胜感激。

【问题讨论】:

  • 你有没有搞定认证模块?我正在寻找类似的东西。这里唯一的答案是创建一个消费者。

标签: c# oauth provider 2-legged two-legged


【解决方案1】:

我无法让 DNOA 与 2-legged OAuth 一起使用,所以我最终让自己的消费者使用 http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs 作为我的基类来处理签名签名。您需要做的就是对其进行子类化并使用签名方法来构建 http 授权标头...

string sigMethodType = GetSigMethodType();
string ts, nonce, normalizedUrl, normalizedParams;
string sig = GenerateSignature(new Uri("http://some-endpoint-to-call"), "GET", out nonce, out ts, out normalizedUrl, out normalizedParams);

string header = "OAuth realm=\"" + normalizedUrl + "\"," +
                OAuthConsumerKeyKey + "=\"" + ConsumerKey + "\"," +
                OAuthSignatureMethodKey + "=\"" + "HMACSHA1SignatureType" + "\"," +
                OAuthSignatureKey + "=\"" + sig + "\"," +
                OAuthTimestampKey + "=\"" + ts + "\"," +
                OAuthTokenKey + "=\"" + String.Empty + "\"," +
                OAuthNonceKey + "=\"" + nonce + "\"," +
                OAuthVersionKey + "=\"" + OAuthVersion + "\"";

获得授权标头后,只需构建您的网络请求并发送它...

var wr = (HttpWebRequest)HttpWebRequest.Create(messageEndpoint.Location);
wr.Headers.Add(HttpRequestHeader.Authorization, BuildAuthHeader(messageEndpoint));
wr.ContentType = messageEndpoint.ContentType;
wr.Method = CdwHttpMethods.Verbs[messageEndpoint.HttpMethod];
using (var resp = (HttpWebResponse)req.GetResponse())
{
    switch (resp.StatusCode)
    {
        case HttpStatusCode.Unauthorized:
            Assert.Fail("OAuth authorization failed");
            break;
        case HttpStatusCode.OK:
            using (var stream = resp.GetResponseStream())
            {
                using (var sr = new StreamReader(stream))
                {
                    var respString = sr.ReadToEnd();
                }
            }
            break;
    }
}

更新: 我还能够两条腿与 devdefined 的 oauth 消费者一起工作。 http://code.google.com/p/devdefined-tools/wiki/OAuthConsumer

var endPoint = new Uri("http://example.com/restendpoint.svc");
            var ctx = new OAuthConsumerContext
                        {
                            ConsumerKey = "consumerkey1",
                            ConsumerSecret = "consumersecret1",
                            SignatureMethod = SignatureMethod.HmacSha1
                        };

            var session = new OAuthSession(ctx, endPoint, endPoint, endPoint);
            var respText = session.Request().Get().ForUri(endPoint).ToString();

如果它有一个空的构造函数或只接受上下文的重载会很好,但这似乎可行。

【讨论】:

  • 仅供参考 - 但 DevDefined.OAuth 确实有重载的 OAuthSession 构造函数,这些构造函数现在只接受消费者上下文,并且支持 XAuth(由 Twitter API 等 dev.twitter.com/docs/oauth/xauth 使用)改进它的 2-legged OAuth 1.0a 故事。
猜你喜欢
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 2013-08-21
  • 2014-11-04
  • 1970-01-01
  • 2012-12-13
  • 1970-01-01
相关资源
最近更新 更多