我正在我的 .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
才能正常工作。
关于.net - 使用.NET WebBrowser控件,为什么Salesforce.com在用户 session 失效后自动登录用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21248639/