在DotNetOpenAuth中实现IConsumerTokenManager

时间:2012-11-11 04:59:33

标签: asp.net-mvc asp.net-mvc-3 dotnetopenauth

我正在尝试在我的ASP.NET MVC应用程序中使用DotNetOpenAuth与LinkedIn API进行交互。要在我的数据库中保存和检索令牌,我需要在服务层中实现IConsumerTokenManager。目前我正在检索访问令牌(而不是请求令牌)的令牌机密,如下所示:

public string GetTokenSecret(string token)
{
    // Retrieves token secret from database based on the user's username
    string tokenSecret = _db.LinkedInAccounts.GetTokenSecret(HttpContext.Current.User.Identity.Name);
    return tokenSecret;
}

这感觉非常脏,因为我必须在我的服务层中引用System.Web和HttpContext。我真的不想这样做,但我无法确定另一种检索访问令牌的方法。我可以使用访问令牌来检索它,如下所示:

string tokenSecret = _db.LinkedInAccounts.GetTokenSecret(token);

但我不确定访问令牌是否是唯一的,以及当存储了数千个访问令牌时,这将如何影响数据库性能。

这是第二种方式,还是有更好的选择?我真的不想在我的服务层中引用System.Web。

谢谢!

更新:如果有人遇到类似的问题,我最后会使用Ninject将用户名作为构造函数参数注入我的IConsumerTokenManager实现中。

1 个答案:

答案 0 :(得分:0)

您应该根据传入的令牌查找秘密。不是登录用户名。为数据库中的该列设置索引应该可以快速查找。我怀疑你当前通过用户名查找的速度不会更快。