ゼノブレイド2黄金の国イーラ……100点!


スポンサーチケットを頂いたので行ってきた。

パスワードレスなユーザー認証時代を迎えるためにサービス開発者がしなければならないこと

https://builderscon.io/tokyo/2018/session/9f0ac19c-0367-4307-a3d4-e5431d80267e

個人的に一番気になっていたセッション。WebAuthn については Web Authentication API で FIDO U2F(YubiKey) 認証 を「あ、まともに使えるようにはなってきているのだな」と思いながら読んだ記憶ぐらいしかなかった。
パスワードというのは大変で、サービスによって使用できる文字列や長さが異なったり、リテラシーがなければ使い回しをしてしまうという感じで、ユーザーの負担が大きすぎる。
今でこそ OAuth で登録できるサービスは増えてきているが、Twitter がバンバンBANしている状態もあって、つらい。
といった話をしていて、「分かる…」という感じで聞いていた。
個人的に WebAuthn の仕組み(認識フロー)や現在利用できるライブラリの状態やスマートフォンへの対応について気になっていたが、そういった話はあまりなかった(認証フローなどはサクッと解説はされていた)。

国民全員に Yubikey を無料配布なんてことがない限り、というかたとえ配ったとしてもユーザーが物理キー使ってアカウント登録するとは思えないし、スマホの指紋認証で対応できないと流行らないだろうなぁと思っていたが、どうやら Chrome 70 が Touch ID に対応しているらしいので Chrome Canary で試せるらしい。

というわけで気になったので試してみた。
w3c に記載のコードを持ってくる。

var publicKey = {
    challenge: new Uint8Array([21, 31, 105]),
  	rp: {
    	name: "ACME Corporation"
  	},
    // User:
  	user: {
    	id: Uint8Array.from(window.atob("MIIBkzCCATigAwIBAjCCAZMwggE4oAMCAQIwggGTMII="), c=>c.charCodeAt(0)),
      name: "alex.p.mueller@example.com",
      displayName: "Alex P. Müller",
      icon: "https://pics.example.com/00/p/aBjjjpqPb.png"
    },
  	pubKeyCredParams: [
    	{
      	type: "public-key",
        alg: -7 // "ES256" as registered in the IANA COSE Algorithms registry  
    	},
    	{
        type: "public-key",
        alg: -257 // Value registered by this specification for "RS256"  
      }
  	],
    timeout: 60000,
    excludeCredentials: [],
    extensions: {"loc": true}
};

navigator.credentials.create({ publicKey  })
	.then(function (newCredentialInfo) { console.log(newCredentialInfo); })
  .catch(function (err) { console.log(err); });

これで動くはず…なんだけど Touch ID を求めてくる例の Window が出現せず何も起きない…
試しに Yubikey を使用したところ反応したのコードは問題なさそう。
Touch ID が付いてる Mac が会社PCしかなかったので、なにか制限がかかっているのかもしれない。よくわからない。

ここから先のフローとしてはクライアント側で秘密鍵と公開鍵を作成、公開鍵をサービスへ送信して保存。
ログインはサービスが生成した乱数を秘密鍵で署名してサービスに送信し、公開鍵で検証が成功すればユーザーを認証することができる。

スマートフォンアプリでもバシバシ対応していったらパスワードレスな世界がやってくると思うので、今後期待の技術として Watch していきたい。

感想

登壇者、運営の方々お疲れ様でした。

参考

dairy