LoginSignup
7
7

More than 5 years have passed since last update.

クライアントアプリからブラウザを開いて自動ログインする方法

Last updated at Posted at 2013-05-19
動作環境

Windows XP,7
.NET Framework 2.0以上

Aipoリマインダーで実装している自動ログインの方法を公開します。

1.ブラウザに渡すhtmlファイルを用意する

autologin.html
<html>  <head>      <noscript>          <meta http-equiv="Refresh" content="0; url={0}">        </noscript> </head> <body onLoad="document.pform.submit();window.focus();">     <form name="pform" action="{0}" method="post">          <input type=hidden name="username" value="{1}">         <input type=hidden name="password" value="{2}">         <input type=hidden name="action" value="ALJLoginUser">          <input type=hidden name="org" value="">     </form> </body></html>```

基本的に、ログイン画面に設定されているパラメータのみをPOSTするようなhtmlを作成します。

{0}…ログイン画面のformのactionと同じ値
{1}…ログインユーザー名
{2}…パスワード

これ以外に必要なパラメータがあれば適宜追加すること。
<font size="-1">
よくよく考えたら、body onloadでsubmitしてるから「&lt;meta http-equiv="Refresh" content="0; url={0}"&gt;」は要らなかったかも。
現状、これでうまく行っています。
</font>

##2.{0}〜{2}に値をセットする処理

値をセットしたものを別のファイルかリソースとして保持しておきます。

##3.ログイン情報のセット済みhtmlファイルをブラウザに渡す

ログイン情報のセット済みhtmlファイルをテンポラリディレクトリに作ります。
そのときのファイル名はランダムなものにしておき、拡張子は.htmlとします。
あとは、そのhtmlファイルをブラウザに渡すために、Process起動します。
コードを見た方が早いですね。


```c#:ThreadingManager.cs
using System;using System.Diagnostics;using System.IO;using System.Text;using System.Threading;using AipoReminder.Utility;using WinFramework.Utility;using System.Reflection;namespace AipoReminder.Manager{    class ThreadingManager    {        private string path = "";        public ThreadingManager()        {        }        public void setBrowserPath(string path)        {            this.path = path;        }        public void Run()        {            if (SettingManager.AutoLogin)            {                // 自動ログイン用のファイルを作成                string fullPath = Path.GetTempPath();                fullPath += @"AipoReminder\";                string fileName = Path.GetRandomFileName();                fullPath += fileName;                string changeFileName = Path.ChangeExtension(fullPath, ".html");                // Shift-Jisでファイルを作成                StreamWriter sw = new StreamWriter(changeFileName,                                                   true,                                                   Encoding.GetEncoding("Shift_Jis"));                sw.WriteLine(SettingManager.AutoLoginHtml);                // ストリームを閉じる                sw.Close();                // ブラウザで表示                this.OpenUrl("\"" + changeFileName + "\"");            }            else            {                // ブラウザで表示                this.OpenUrl("");            }        }        /// <summary>        /// 指定のURLを標準ブラウザで開く        /// </summary>        /// <param name="targetUrl"></param>        private void OpenUrl(String targetUrl)        {            string arg = "";            if (String.IsNullOrEmpty(targetUrl))            {                arg = SettingManager.Url;            }            else            {                arg = targetUrl;            }            ProcessStartInfo info = new ProcessStartInfo();            Process p = null;            if ("".Equals(path))            {                info.FileName = WinFramework.Utility.RegistryUtility.GetDefaultBrowserExePath();                info.WorkingDirectory =
                     Path.GetDirectoryName(
                        WinFramework.Utility.RegistryUtility.
                        GetDefaultBrowserExePath());            }            else            {                info.FileName = path;                info.WorkingDirectory = Path.GetDirectoryName(path);            }            info.Arguments = arg;            p = Process.Start(info);            p.WaitForInputIdle(60000);        }    }}```

SettingManager.AutoLoginは、自動ログインさせるかどうかの設定情報です。
SettingManager.AutoLoginHtmlは、ブラウザに渡すhtmlファイルに{0}〜{2}の値をセットしたリソースです。
WinFramework.Utility.RegistryUtilityは、レジストリからデフォルトのブラウザのパスを取得するUtilityです。

使い方はこのようになります。

ThreadingManager threadingManager = new ThreadingManager();
// ブラウザ指定で自動ログインする場合
//threadingManager.setBrowserPath("ブラウザの実行ファイルのパス");
Thread thread = new Thread(new ThreadStart(threadingManager.Run));
thread.Start();```

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7