0

这是一个 .Net WinForms 应用程序。它使用网络浏览器控件来执行 OAuth2 过程。在这种情况下,一旦用户同意我们的应用程序访问他们的帐户(在 Constant Contact 上),重定向 URL 将包含一个授权代码,我们可以使用它来获取访问令牌。但是重定向导航永远不会发生。所以我们没有收到包含授权码的 URL。网络浏览器不会从“允许/不允许”页面导航。在 Fiddler 中查看此内容时。当用户单击“允许”时,响应标头确实包含代码。但是 Fiddler 还显示在 SendingResponse 时会话被中止。我想这就是为什么我们从网络浏览器控件获得的唯一进一步反馈是“_javascript:void(0)”的原因。

这是响应标头(来自 Fiddler):代码响应

HTTP/1.1 302 Found
Date: Sat, 14 Dec 2019 17:05:41 GMT
Content-Security-Policy: referrer origin
X-Frame-Options: SAMEORIGIN
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Content-Type: text/html; charset=UTF-8
**Location: https://www.vinnow.com?code=wL9Iu2J6xpnmT7joclc4lgb4dtVF__12345**
Content-Length: 0

这些是相关的会话属性:

SESSION STATE: Aborted. 
Request Entity Size: 129 bytes. 
Response Entity Size: 0 bytes.

== FLAGS ==================
BitFlags: [IsHTTPS, ClientPipeReused, ServerPipeReused] 0x19
**X-ABORTED-WHEN: SendingResponse**
X-CLIENTIP: 127.0.0.1
X-CLIENTPORT: 58424
X-EGRESSPORT: 58425
X-HOSTIP: 208.75.122.17
X-PROCESSINFO: testctct.vshost:22196
X-RESPONSEBODYTRANSFERLENGTH: 0
X-SERVERSOCKET: REUSE ServerPipe#457

我想知道是否有一种方法可以确定哪一方中止了会话(客户端/服务器)?为什么它会被中止?

我已经尝试使用网络浏览器的多种配置来执行此过程。总是一样的结果。甚至使用“webbrowser2”进行了测试,因此我可以捕获任何导航错误。没有。结果相同。如果此过程通过常规浏览器或 Postman 执行,则成功完成。

有一个替代的 OAuth2 过程,而不是返回授权代码,而是返回一个访问令牌。但是该访问令牌是短暂的,并且没有刷新令牌。该特定过程使用相同的网络浏览器和相同的程序成功完成......用户登录......用户允许......重定向到提供的 URL。

4

0 回答 0