パスキーでのサインイン(試験的)¶
近年は、パスキーでのサインインを求める証券会社が増えています。お使いの証券会社がそうなら、
Cookie をブラウザからコピーする代わりに、briskapi がサインインして BRiSK のセッション
Cookie を保存できます。SBI証券、松井証券、マネックス証券、SMBC日興証券、立花証券 e支店の
BRiSK に対応し、他の証券会社も追加できます。Chrome、Node 22 以上、そしてパスキーの安全な保管先(macOS のキーチェーンまたは Windows の資格情報マネージャー。Linux では選択式の本人のみ読み取り可のファイル)が必要です。macOS と Windows で動作し(Windows では PowerShell か cmd から実行し、WSL ではなく Windows 側の
Chrome と Node を使います)、Linux でもテストしています。
仕組み¶
パスキーは1組の鍵です。公開鍵は証券会社が持ち、秘密鍵は通常、スマートフォンやパソコン、パスワードマネージャーの中にあります。指紋や PIN で秘密鍵が使われ、証券会社が送るチャレンジに署名することで、本人であることを証明します。briskapi はこの仕組みを借ります。専用の Chrome を起動し、その Chrome が持つ仮想オーセンティケーター(スマートフォンの代わりを務め、確認なしで署名するソフトウェア)が署名します。証券会社のサイトは、その違いを見分けられません。
- 初回のみ
brisk enroll。 証券会社を選ぶと、別の Chrome ウィンドウがそのログインページで開きます(普段の Chrome ではなく、一時的なプロファイルです)。いつもどおりサインインし、新しいスマートフォンに登録するときと同じように、証券会社のセキュリティ設定でパスキーを登録します。仮想オーセンティケーターがそれを受け取ります。サイトに登録完了と表示されたら、ターミナルで Enter を押してください。briskapiがパスキーと選んだ証券会社をキーチェーン(Windows では資格情報マネージャー)に保存し、Chrome は閉じます。 e支店では、パスキーの前にユーザIDを入力するフォームのため、enrollが最初にユーザIDを尋ね、パスキーと一緒に保存します。ウィンドウは通常のログイン(ユーザID、暗証番号、電話番号認証)で開きます。パスキーはログイン後に表示される登録画面か、お客様情報 › 設定情報 › パスキー認証から登録してください。 - 毎回
brisk login。 保存したパスキーを読み込んだ同じ Chrome が開き、ログインページでパスキーのボタンを押すと、仮想オーセンティケーターが署名します。そのウィンドウで証券会社のサイトから BRiSK を開いてください(--launch-urlを指定すれば自動で開きます)。briskapiが BRiSK のセッション Cookie を読み取って保存し、Chrome を閉じます。 - あとは使うだけ。 5社のどれでも、保存した Cookie を
brisk live --site sbi(またはその証券会社のサイト)とbriskapi.briskAPI が使います。ご自身で追加した証券会社にはbriskapiのデータクライアントがないため、Cookie はご自身の利用のために保存される(~/.config/brisk/cookies/)だけです。
スマートフォンやパスワードマネージャーにある既存のパスキーには手を加えません。証券会社の一覧にパスキーが1つ増えるだけで、セキュリティ設定からいつでも削除できます。
注意点¶
- 保存したパスキーは認証情報です。 持っている人は誰でも、追加の確認なしにあなたの証券口座へサインインできます。パスキーはキーチェーン/資格情報マネージャーにのみ保存され(
BRISK_PASSKEY_STORE=fileなら本人のみ読み取り可のファイルに保存しますが、安全性は下がります。Windows ではそのファイルの保護はユーザープロファイルのフォルダー(本人と管理者のみ読み取り可)に依存します)、お使いのマシンの外には出ず、ログにも表示されません。e支店ではユーザIDも同じ場所に一緒に保存します。brisk forgetでここから削除できます。証券会社側でも削除してください。 - 試験的な機能です。 各証券会社のログインページ、パスキーボタンの文言、BRiSK の起動方法は公開ページをもとにしたもので、実際の口座では試していません。
--login-url、--passkey-button、--launch-urlや下記のsites.jsonで上書きでき、うまくいかない点はぜひお知らせください。 - 証券会社に拒否される可能性があります。 Chrome は自動操作されていることをサイトに伝えます。利用前に、証券会社の規約でこの使い方が認められているかご確認ください。
コマンド¶
brisk sites # 選べる証券会社と BRiSK のアドレス
brisk enroll [--site matsui] # 初回のみ。指定しなければ証券会社を選ぶよう求められます
brisk login # 毎回。enroll で登録した証券会社にサインインします
brisk forget # 保存したパスキーを削除
Python では passkey.enroll(site="matsui")(e支店では passkey.enroll(site="e-shiten", user_id="..."))と signin = passkey.login() を使います。signin.cookies が BRiSK の Cookie、signin.client がデータクライアントのある証券会社でのクライアントです。
証券会社を追加したり、組み込みの設定を直したりするには、~/.config/brisk/sites.json を編集します。
{"sites": [{"id": "mybroker", "name": "My Broker", "login_url": "https://broker.example/login",
"cookie_host": "mybroker.brisk.jp", "passkey_button": "パスキーでログイン"}]}
ほかのキー: cookie_prefix、launch_url、enroll_url(初回のサインインがパスキーのページとは別のページの場合に enroll を始める場所)、user_field(パスキーのボタンを押す前に入力が必要なユーザID欄の CSS セレクター。指定すると enroll がユーザIDを尋ねます)。
内部の仕組みは ARCHITECTURE.md を参照してください。