【发布时间】:2012-03-30 23:47:13
【问题描述】:
我正在编写一个桌面应用程序,其中一部分是通过 OAuth 2.0 流程。
步骤如下:
- 开始进程 - 打开带有登录页面的网络浏览器。
- 用户登录并授权我的应用。
- 在后台搜索具有特定名称的进程,将其(名称)保存在应用程序中。
- 最后我关闭了网络浏览器。
问题在于,如果用户之前在网络浏览器中打开了一些选项卡 - 在第 1 点。添加了新选项卡,在第 4 点。所有内容都已关闭(带有所有选项卡的网络浏览器)。
你能告诉我是否有办法在网络浏览器中关闭单个标签吗? 或者也许还有其他/更简单的方式来通过 OAuth?
作为手动解决方案,我将简单地向用户显示信息“现在您可以关闭此选项卡”,但我想自动执行此操作。
这是 C# .Net 4.0 WPF 项目。
string strAuthUrl = "http://accounts.example.com/login",
strAuthCode = string.Empty;
// Request authorization from the user (by opening a browser window):
ProcessStartInfo startInfo = new ProcessStartInfo(strAuthUrl);
startInfo.CreateNoWindow = false;
//1.
Process.Start(startInfo);
//2. - is happening in web browser
//3.
do
{
foreach (Process proc in Process.GetProcesses())
{
if (proc.MainWindowTitle.StartsWith("Success code="))
{
strAuthCode = proc.MainWindowTitle.ToString().Substring(13, 30);
//4.
try
{
// Close process by sending a close message to its main window.
proc.CloseMainWindow();
// Free resources associated with process.
proc.Close();
// Wait 500 milisecs for exit
proc.WaitForExit(500);
//if proc has not exited so far - kill it
if (proc.HasExited == false)
{
proc.Kill();
proc.WaitForExit();
}
}
catch (Exception ex)
{
//Do something with exception
}
break;
}
}
}
while (string.IsNullOrEmpty(strAuthCode));
感谢您的建议。
【问题讨论】:
-
+1 是我见过的最奇特的身份验证方式
-
有关主题的更多信息:您可能会考虑使用现有的 C# OAuth 库之一而不是此浏览器的东西 - 例如,来自stackoverflow.com/questions/3997172/…的答案之一
-
您可以使用原生的
WebBrowser控件将其保留在您的应用程序中。 -
强制 url 在默认浏览器的新实例中加载? stackoverflow.com/questions/742598/…
-
只需使用 HttpWebRequest。无需涉及外部 Web 浏览器。
标签: c# wpf process oauth browser