OAuth1a DNOA和令牌的流程

时间:2012-09-27 21:58:15

标签: oauth asp.net-mvc-4 asp.net-web-api dotnetopenauth

我们正在使用DNOA的.Net MVC4 WebApi应用程序和使用Spring Security的Java应用程序之间实现一个简单的双腿OAuth1a对话。在实现Delegating MessageHandler以验证传入请求时,DNOA似乎坚持在请求中使用令牌。 Spring实现不需要令牌。我的感觉是.Net实现在某种程度上是不正确的。

这是处理程序,如果我使用令牌发送它,它就可以工作。

TokenManager tokenManager = new TokenManager();
var requestW = new HttpRequestWrapper(HttpContext.Current.Request);
var sp = new ServiceProvider(Constants.SelfDescription, tokenManager, new NonceStore());
try
{
     var auth = sp.ReadProtectedResourceAuthorization(requestW);
     if (auth != null)
     {
            //verfy etc etc
     }
 catch(Exception)
 { //return UnAuthorized response }
 return base.SendAsync(request, cancellationToken);
}

在这段代码中,我在ReadProtectedResourceAuthorization调用上得到一个异常,它说它收到了UnauthorizedRequest。 那么这个流程应该是什么样的呢?我看到的大多数内容都说这种类型的流程不需要令牌,但DNOA似乎坚持这一点。任何见解都表示赞赏。

1 个答案:

答案 0 :(得分:1)

这听起来像你要做的是actually 0-legged OAuth(无论如何,根据我的术语,因为在你想要做的事情中没有OAuth的原始三条腿)。至少我从你的描述中收集到你的访问令牌和访问令牌秘密是空的,你所拥有的只是消费者密钥和秘密。

如果我没记错的话,DNOA不支持空访问令牌(因为OAuth 1规范中不允许这样做)。

您可以尝试的替代方案:

  1. 使用非空(但可能仍然是硬编码,如果需要)访问令牌和访问令牌密钥。
  2. 使用基本身份验证代替HTTPS,使用您的使用者密钥和使用者密钥作为用户名和密码。
  3. 使用其他OAuth 1服务提供商库。