【问题标题】:OAuth2 confusion, C#.NetOAuth2 混淆,C#.Net
【发布时间】:2013-05-09 20:47:31
【问题描述】:

我正在尝试开发一个 Web 服务器应用程序,在使用 C# 和 .net 的内部服务器上运行。我的应用程序的目的是与 Google 日历交互,阅读活动,然后生成差旅费用报告。

基于示例 here 中的 OAuth2 代码,我能够想出一个大多数情况下都能正常工作的应用程序。

我之所以这么说,主要是因为在某个地方,用户是否已登录和/或已通过身份验证以及哪个用户已登录会产生混淆。

例如: 如果我启动 Chrome 然后访问我的应用程序,一切都很好,但如果我打开另一个浏览器(IE 或 FF),登录到另一个 Google 帐户,然后启动我的应用程序,它给出的报告是那个帐户的报告/ 是否已在 Chrome 中登录 Google?在第一个浏览器(在本例中为 Chrome)中,URL 包含参数 ?code 但第二个浏览器中的 URL 不包含,并且仍然只是我的应用程序的 URL。

当我使用不同的 Google 帐户在第二个浏览器中启动我的应用程序时,似乎身份验证失败(按钮文本仍为“身份验证”但代码行(见下文)仍在执行和接收单击“验证”按钮后的响应,返回的数据来自通过第一个浏览器登录的帐户。

CalendarList response = _service.CalendarList.List().Fetch();

我尝试找出为什么会发生这种情况,但没有成功,但它开始让我发疯,并且到目前为止限制了我的应用程序的实用性。

问题是否与存储在我们服务器上的会话状态信息有关?我使用的 OAuth2 代码示例是否已过期,如果是,我在哪里可以找到正确的示例?

任何建议将不胜感激。

谢谢

【问题讨论】:

  • 您如何托管您的应用程序? IIS 快递?如果是这样,当您第二次启动应用程序时,您确定 IIS Express 正在重新启动吗?您必须明确重新启动它
  • 我们在运行 Windows Server 2008 Standard 的 IIS 7 上托管应用程序。
  • 我查看了原始示例中的代码,并注意到以下声明: private static TasksService _service; // 我们不需要为每个客户端提供单独的服务实例。私有静态 OAuth2Authenticator _authenticator;我的应用程序使用 CalendarService 而不是 TasksService,但我将类型保留为示例代码中的静态类型。但是当我删除静态时,我的应用程序似乎可以正常工作。为什么在示例中它推断出需要静态?

标签: google-api-dotnet-client


【解决方案1】:

我同意 user2367592,尝试在没有静态服务的情况下测试您的应用程序,如果它有效,请告诉我们。

无论如何,在 1.5 版(目前我们使用 1.3)中,我们将摆脱 DotNetOpenAuth 并改进整个 OAuth2 体验,所以 - 对任何不便表示抱歉。

【讨论】:

  • 到目前为止一切顺利,没有静态服务,我的应用程序现在似乎可以正常工作。
猜你喜欢
  • 1970-01-01
  • 2017-10-08
  • 2022-06-16
  • 1970-01-01
  • 2011-03-22
  • 2010-11-19
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
相关资源
最近更新 更多