.net - .NET WebBrowser 控件不接收 OAuth2 重定向 URL
问题描述
这是一个 .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。
解决方案
推荐阅读
- python - 生成类似于数据时间序列的股票?
- php - Laravel Avored admin 403 被禁止,无法访问 avored 包中的管理页面
- javascript - 解析 iframe HTML 代码以仅获取 src 属性
- amazon-web-services - AWS - 显示 DynamoDB 中的所有连接用户
- swift - 如何解决 Swift 中的 [NSArray0 objectAtIndex:] 错误?
- python - Django/Pillow ImageField - 图像未显示
- django - Django graphen 创建 Mution 触发错误
- python - 如何创建连接、执行和断开连接的函数
- python - 如何最小化给定数据集的错误
- java - 如何在表格中添加垂直标题?