@kyanny's blog

My thoughts, my life. Views/opinions are my own.

1Password の item link (permalink) について調べたメモ

iOS アプリの URL scheme ではなく、

Use item links to help others find shared items | 1Password

これの話。

「Copy Link(リンクをコピー)」で入手できる URL は以下のような形式になっている。

https://start.1password.com/open/i?a=3B2ZGWDZOZG6XDG5H2IJGUEADQ&v=boqzyrqxkbuidqbc7gle7vq5xq&i=queykooqcvbitd4rdvxemoauiq&h=my.1password.com

見やすさのために改行を入れると、こういう構造だとわかる。

https://start.1password.com/open/i
  ?a=3B2ZGWDZOZG6XDG5H2IJGUEADQ
  &v=boqzyrqxkbuidqbc7gle7vq5xq
  &i=queykooqcvbitd4rdvxemoauiq
  &h=my.1password.com

この URL をブラウザで開くと、以下の URL に遷移する。この遷移は HTTP リダイレクトではなく JavaScript によって発生している(後述)。

https://my.1password.com/signin?landing-page=%2Fvaults%2Fboqzyrqxkbuidqbc7gle7vq5xq%2Fallitems%2Fqueykooqcvbitd4rdvxemoauiq

https://my.1password.com/signin
  ?landing-page=
    %2Fvaults%2Fboqzyrqxkbuidqbc7gle7vq5xq
    %2Fallitems%2Fqueykooqcvbitd4rdvxemoauiq

後者の URL におけるクエリストリングも踏まえると、前者の URL におけるクエリストリングの各パラメータは以下のような意味と推察できる。

a と h が両方必要なのは何故?という疑問が浮かんだが、ページ遷移を JavaScript のみで行う(API リクエストを発生させない)ために、 URL 内に遷移先 URL の情報を含めているのだろう。

JavaScript によって遷移している箇所は、以下のように特定できる。

画像一枚目: 赤矢印の行が start.1password.com な URL に対するリクエスト。黄矢印の行が遷移先の URL に対するリクエスト。

f:id:a666666:20201127020702p:plain

画像二枚目: 遷移先 URL へのリクエストの Initiator の JavaScript (minified) を prettfiy した該当行。素朴に window.location.assign() している。

f:id:a666666:20201127021049p:plain

遷移先の URL をブラウザで開いたとき、 1Password アプリで開きますか?というダイアログが表示される(こともある。ダイアログが出る・出ない条件は詳しく調査していない。おそらく 1Password アプリのインストール状況やブラウザ拡張のインストール状況による)。