2011-09-27 76 views
2

好的,这是我的问题。 我了解OAuth协议的过程,但我对此有一些疑惑。 我试图利用DotNetOpenAuth.Here是我没有得到的东西。 假设用户(新用户)尝试使用Twitter登录我的网站。 的过程是这样的(随时纠正我,如果我错了):使用DotNetOpenAuth的OAuth?

  • 请求令牌的情况下(如果我的ConsumerKey和ConsumerSecret都OK)。
  • 然后发出授权令牌并将用户重定向到Twitter。
  • 用户授权我的应用程序。并发出访问令牌。
  • 我得到当前用户的详细信息并将它们存储在数据库中(以及访问令牌)。

到目前为止,这么好。 现在这里是令人困惑的部分。用户注销。然后回来并尝试再次使用Twitter进行身份验证。我如何确定他的访问令牌?如果我在访问令牌之前无法获得他的身份?我有他的数据库,但我无法确定他是谁,然后再次通过相同的步骤。我确定我错过了一些东西,如果你指出,我会很感激。我知道IConsumerTokenManager,我试着对InMemoryTokenManager进行逆向工程,看看它是如何工作的,但它仍然不清楚。

回答

5

啊,使用授权协议验证的乐趣(ahem,缺乏它)。我不喜欢的OAuth用于登录哎呀...

有了这样的方式,让我澄清流动的比特:

  • “未经授权”请求令牌发出(如果您的ConsumerKey和ConsumerSecret没问题)。
  • 用户授权您的应用程序,并将其发送回您的应用程序
  • 您的请求令牌现在是“授权”,DotNetOpenAuth将其交换为访问令牌。
  • 您使用访问令牌来获取当前用户的详细信息并将它们存储在数据库中。

当以后,匿名用户访问您的网站并希望登录时,您可以全面启动流程。只有这一次,因为Twitter识别用户(如果需要,他们登录后)Twitter可能会立即将用户重定向回您的应用程序,而不是要求用户确认登录。请求令牌将被授权,您将交换它为访问令牌,并且您将使用它来获取用户的数据。哦!现在您可以看到数据与数据库中已存在的条目相匹配,并且欢迎您的访问者回来。

+0

谢谢您花时间回答我。我知道OAuth用于授权(它的名称正确:)),我已经为OpenId编写和测试了代码,并且使用您的框架轻而易举。我会随时推荐它。 (不幸的是)使用Facebook/Twitter身份验证的唯一方法是通过OAuth。我已经写了一个数据库的消费者令牌管理器,但是twitter每次都在不停地要求我授权......所以我想我错过了一些东西。 –