使用.NET WebBrowser控件,为什么Salesforce.com会在用户会话无效后自动登录?

使用.NET WebBrowser控件,为什么Salesforce.com会在用户会话无效后自动登录?,.net,rest,oauth-2.0,salesforce,webbrowser-control,.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("&

我正在通过.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登录屏幕,他/她登录,我执行所有流程以获取安全令牌,用户可以使用sfdc

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

显然,HTTP会话仍然处于活动状态,尽管用户单击了注销按钮。会话由底层的
URLMON
层管理,因此
WebBrowser
的新实例保持在同一会话上。尝试如下方式使会话无效:

dynamic document = webBroweser.Document;
document.execCommand("ClearAuthenticationCache", false);
在处理当前的
WebBroweser
实例之前,必须在其内部有一个功能性的
文档才能运行


更多信息:。

太棒了!工作很有魅力,欣赏它!不适用于Facebook登录流,可能是因为Facebook使用HttpOnly cookies。如果Cookie是HttpOnly Cookie,则webbrowser不会存储它们。查看此选项是否对您无效。查看此选项如果Cookie是HttpOnly Cookie,则webbrowser不会存储它们。看到这个了吗