Slide 1

Slide 1 text

SPAのサイトを アプリのwebviewで利用するとき のトークンの渡し方 ヒグ!(樋口修也)

Slide 2

Slide 2 text

発表者 フロントエンド,認証認可 2015年 旭川→岩手大学へ入学 2019年 東京のIT企業に新卒入社 2020年 コープさっぽろへ転職し札幌へ ダブルダッチ、筋トレ、ダンス AWS CDK, Vue.js ワクチンで昨日39.1℃まで上がりました 樋口修也(24) 担当: 経歴: 趣味: 好み: 最近: 新参者なのでお手柔らかにお願いします

Slide 3

Slide 3 text

webviewとは・・ WEBで公開しているサイトなどをアプリから 呼び出して、サイトをあたかもアプリのように 見せて動作させる技術 サイト アプリ

Slide 4

Slide 4 text

1. Authorization headerでトークンを渡す サイト GET https://xxx.com { “Authorization”:“Bearer ey...” }

Slide 5

Slide 5 text

1. Authorization headerでトークンを渡す サイト GET https://xxx.com { “Authorization”:“Bearer ey...” } SPAでは不可

Slide 6

Slide 6 text

SPAの構成 index.html xxx.js クライアント API通信

Slide 7

Slide 7 text

SPAの構成 index.html xxx.js クライアント API通信 webview アプリ Authorization あり Authorization なし API通信に必 要なトークンな し

Slide 8

Slide 8 text

SPAではない時の構成 index.html xxx.js クライアント サーバー webview アプリ Authorization あり Authorization なし token保持 SPAではない時なら簡単にトークンの保持ができる

Slide 9

Slide 9 text

案1クエリでトークンを渡す index.html xxx.js クライアント webview アプリ https://xxx? token=ey... https://xxx? token=ey... ● SPAでもURLは残るのでwebview内で活用できる ● TLSで暗号化されている場合ドメイン以外は隠されるので通信を傍受されてもクエリは覗かれない ● サーバーログに残ってしまう

Slide 10

Slide 10 text

RFC6749でも禁止するような文言が アプリなのでブラウザの履歴にはのこならないが、サーバーログには残るのでやはり避 けるべき

Slide 11

Slide 11 text

案2ローカルストレージでトークンを渡す index.html xxx.js クライアント webview アプリ https://xxx? token=ey... https://xxx ● 「evaluateJavascript」関数を利用してローカルストレージを操作 window. localStorage

Slide 12

Slide 12 text

issue ばっか立っててうまくいっていないっぽい

Slide 13

Slide 13 text

案3 js発火させた時の引数としてトークンを渡す index.html xxx.js クライアント webview アプリ https://xxx? token=ey... https://xxx ● 「evaluateJavascript」関数を利用してjsを発火

Slide 14

Slide 14 text

JSがトランスパイルされてしまうのでうまく呼べない

Slide 15

Slide 15 text

案4 ワンタイムパスワードを渡す index.html xxx.js クライアント webview アプリ https://xxx https://xxx ?otp=... ● トークンの代わりにOTPを渡す ● webview側からOTPとトークンの交換を行う ● 実装方法が煩雑 トークン交 換API otpとtokenをpostで交換

Slide 16

Slide 16 text

実装方法の詳細は記事にしたのでご覧ください https://menta.work/post/detail/13200/0m3pMbwd9CxzqXiTPLTM

Slide 17

Slide 17 text

まとめ ● リファレンスに乗っているようなベストプラクティスでも現実問題上手くいかない場合 もある ● 今のところ案1,4が把握している実現方法 ● SPAでwebviewへトークンを渡す方法が正直どれもイケてない ● webviewは利用規約ぐらいに留めてトークンを扱う部分はnativeで実装したほうが いい ● 誰かいい方法あったら教えて欲しいです!