.net - 使用.NET WebBrowser控件,为什么Salesforce.com在用户 session 失效后自动登录用户?

标签 .net rest oauth-2.0 salesforce webbrowser-control

我正在我的 .NET 应用程序中通过 REST 登录用户。为此,我在 WebBrowser 控件构造函数中执行以下操作:

string server = "https://login.salesforce.com/";
var authURI = new StringBuilder();
authURI.Append(server + "services/oauth2/authorize?");
authURI.Append("response_type=code");
authURI.Append("&client_id=" + clientID);
authURI.Append("&redirect_uri=" + redirectURL);
webBrowser1.Navigate(authURI.ToString());

这工作正常,用户将看到标准的 sfdc 登录屏幕,他/她登录,我执行所有流程来获取安全 token ,并且用户能够使用 SFDC。

用户注销并尝试再次登录(例如使用不同的名称)后会发生有趣的事情。此时安全 token (sessionId)已被撤销(我检查过)。 他/她单击登录按钮,上面的代码再次运行,但 salesforce 不会再次显示 SFDC 登录 UI,而是自动登录用户并重定向到 RedirectURI,从而启动登录流程。因此用户无法使用不同的凭据登录...... 我确信这是因为 SFDC 留下了一些 cookie,但是删除所有 cookie 后,用户仍然会自动登录...我也这样做。Close(); this.Dispose();登录后在 WebBrowser 控件上,因此下次实例化它时 - 它是一个全新的控件...

最佳答案

显然,尽管用户单击了“注销”按钮,HTTP session 仍然处于事件状态。该 session 由底层 URLMON 层管理,因此 WebBrowser 的新实例保留在同一 session 上。尝试像这样使 session 无效:

dynamic document = webBroweser.Document;
document.execCommand("ClearAuthenticationCache", false);

在处理 WebBroweser 的当前实例之前执行此操作,其中必须有一个功能性的Document 才能正常工作。

更多信息:Understanding Session Lifetime .

关于.net - 使用.NET WebBrowser控件,为什么Salesforce.com在用户 session 失效后自动登录用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21248639/

相关文章:

.net - ASMX Web 服务较慢的第一个请求

c# - 如何在 Dapper .Net 中使用 SQL 批量复制?

api - 有限收集的HTTP状态码?

java - 用于发送带附件的电子邮件的 API REST

java - 如何在 Spring Boot 微服务应用程序之间传递用户 ID

c# - 如何以编程方式在 netcf 中发送 TAB 击键

c# - 线程 : Thread. CurrentThread.Name 和 Thread.CurrentThread.ManagedThereadId

java - 从 spring mvc Controller 返回 json 对象列表

amazon-web-services - 我正在尝试将 AWS Cognito 与 Azure Ad 集成以进行单点登录,但页面 login.live.com/oauth20_authorize.srf 抛出 404 错误?

c# - 由于 Azure 广告 OpenIdConnectAuthentication 中的访问 token , session 将在 1 小时后过期