業務アプリケーションの操作を自動化する際に避けて通れないのが、
そのアプリケーションへのログイン情報(ユーザーID/パスワード)をどこから持ってくるか?、という話。
Unattended robotなら、Orchestrator内のCredential型Assetに持たせといて、
オートメーション内でGet credentialで取ってくればいいんだけど、Attended robotはそうもいかない。
- オートメーション起動時にダイアログ出して人間に入れさせる → ダサい。めんどくさい。
- ローカルファイルに書いといて、Read text file → ええっ、パスワードを平文ファイルに書くの?
- オートメーションのType intoのプロパティにべた書き → オートメーションが流出したら最悪。
というわけで色々悩んだのですが、UiPath AcademyでWindows資格情報の話が出たのをふと思い出しました。
Windows資格情報に持たせる
Windowsには資格情報マネージャーという、ログイン情報をセキュアに保持する仕組みがあるので
そこに各アプリケーションのログイン情報を持たせておいて、オートメーションの中で取ってくるのが
今考えられるベストな方法だと思います。
これならPCにログインする人ごとにユーザーID/パスワードを変えられるしね。
というわけで、Windows資格情報を使ってQiitaにログインさせてみたいと思います。
Windows(汎用)資格情報の設定
③資格情報(ログイン情報)の入力
1行目は「インターネットまたはネットワークのアドレス」とありますが、別にURLである必要は無く、
わかりやすい任意の名前を付ければ良いです。UiPathはこの名前でログイン情報を取ってきます。
今回の例では、"Qiita-Login"とします。
Windows資格情報用パッケージのインストール
UiPathのデフォルト機能にはWindows資格情報を取ってくるアクティビティは含まれていないので、
Package ManagerからUiPath.Credentials.Activitiesを追加インストールします。
インストールすると、System > Credentialsの下に専用アクティビティが追加されます。
これで準備完了。
オートメーションからログイン情報を取得
Windows資格情報からQiitaへのログイン情報を取得し、Qiitaにログインするところまでやってみます。
Windows資格情報を取得するアクティビティはGet "Secure" Credential。
(※似た名前でGet Credentialもありますが、こっちはAsset用で別物なので注意)
Targetには資格情報につけた名前を指定、ユーザーID/パスワードが返ってくるので、それぞれ変数に格納。
で、Type intoにそれぞれユーザーID/パスワードを設定すると、パスワード側で警告が出る。
ええと、「'System.Security.SecureString'の値を'String'に変換できません」とな。
実はGet Secure Credentialから返ってくるパスワードはSecureStringという専用の型に入ってくるので、
そのままではType intoアクティビティが食えないのです。
困った時はUiPath Communityを検索・・・あったあった。
SecureString → Stringへの変換は
new System.Net.NetworkCredential(string.Empty, パスワード変数).Password
でいいのか。strPassword.ToString()じゃダメらしい。
というわけで、変換したものをType intoに食わせて・・・
今回はここまで。
2018/07/03
SecureString → Stringへの変換ですが、@hidechaさんのアドバイスにより、Type intoの代わりに
Type Secure Textアクティビティを使う事で、変換不要でそのままSecureString変数を入力できました。
こっちの方が全然楽ですね。いや恥ずかしい。
@hidechaさんありがとうございました!