contentアプリで「ログインしっぱなし」はどのように実現されているか?アプリログイントークンこのツイートを見て、「アプリで再ログインを頻繁要求されるってユーザビリティ良くないな。」と思ったのですが、普段裏側の仕組みは意識していなかったりテックリードの方に任せきりだったりしていたので、これを気に調べてみました。時代、もはやauthenticationですらないと思うのよね。(何を言ってるかわからねえだろうと思うが。2019年7月8日この記事は「アプリでログインしっぱなしは、どのように実現されるの?」という疑問と調べた結果を共有するために書いていきます。アクセストークンという仕組みとは?「なぜアクセストークンという概念が必要なのか?」モバイルアプリでユーザー認証をしつつAPI通信をしようと思うと、通信のたびにID/PassをAPIに渡す必要があります。それを実現するためには、ローカルにクレデンシャルを保存する必要があります。これはセキュアではないという問題があります。アクセストークンという「これは認証済みのユーザによって認可されたリクエストだ」ということを保証するトークンを使った仕組みを利用します。「アクセストークンを用いてどのようにサーバーとやりとりしているのか?」モバイルアプリのユーザ認証情報についてまとめてみたを読んで理解しました。Tokenをクライアントに返す。Tokenの検証をして、APIレスポンスを返す。callをしています。アクセストークンの有効期限が切れたら再認証必要になってしまうのでは?ここで気になるのが、アクセストークンの有効期限」の事で、それを過ぎると結局は再認証が必要になってしまうのでは?と思ってしまいます。この問題は「リフレッシュトークン」を用いる事で解決します。仕組みとしては、アクセストークンを取得した時にリフレッシュトークンも一緒に返してもらい、このリフレッシュトークンをトークンエンドポイントに渡す事で、新しいアクセストークンが帰ってきます。(リフレッシュできる)こうしてアクセストークンをリフレッシュして通信をし続ける事で、ログインしっぱなしを維持することができるようです。リフレッシュトークンに有効期限があったら、同じ問題が続くのでは?リフレッシュトークンにも有効期限はあります。アクセストークンの有効期限が非常に短いのに比べて、リフレッシュトークンの有効期限は長いです。書いてあるので、リフレッシュトークンの有効期限は半年等かなり長いので、十分にユーザビリティを損なわない体験を与える事ができます。6ヶ月の間に一度も使われなければ、リフレッシュトークンは機能しなくなる。いうニュアンスなので、こちらは一回でも使えば同じものを使い続けられるように思います。15分とかだと、バックグラウンドに入ってるうちに有効期限が切れてしまってリフレッシュし損ねるみたいなケースが想定できますが、6ヶ月もあれば期限が切れるまでに十分な期間があるので、それまでにまたリフレッシュトークンを更新できていれば、ずっとログインしているように振る舞う事が出来ますね。登場するように思います。このあたりに関してはあまりネットから知見を得られなかった(ググりかたが悪いかも)ので、教えていただけると助かります。注意点としてkeychainItemは明示的に削除処理を入れないと、アプリ削除しても残る複数デバイス間の同期をfalseにしておく必要があるなどがあります。リフレッシュトークンは、同一アカウントでも基本的に端末ごとに違うのが望ましいとのことです。キーチェーンの挙動はiosのキーチェーンについてという記事がわかりやすかったです。リフレッシュトークンは何度でも使えるの?teratailの記事が分かり易かったのですが、RFC6749では以下のように言及しています。リフレッシュトークンを無効化してもよいその場合、クライアントは一度使われたリフレッシュトークンを破棄して、新しいトークンに置換しなければならないこの仕様通りに考えると、毎回リフレッシュトークンを生成する認可サーバーの場合は、クライアントは毎回新しいリフレッシュトークンを受け取って古いのと置換しながら使うのが正しいようです。まとめ以下がここまでの振り返りとなります。アプリでID/Passを保存せずにセキュアにやりとりするための仕組みとしてアクセストークンという概念がある。アクセストークンの有効期限は短いのでリフレッシュトークンという有効期限の長いトークンを合わせて発行し、リフレッシュトークンを使う事で新しいアクセストークンを得られる。この仕組みでログイン維持の振る舞いが出来る。requestStockLike987@yosshi4486九蓮宝燈上がった系iOSエンジニアhttps://www.wantedly.com/users/6233980Follow株式会社ゆめみみんなが知ってるあのサービス、実はゆめみが作ってます。スマホアプリ/Webサービスの企画・UX/UI設計、開発運用。AWS等エンジニア・クリエイターの会社です。upLoginユーザーは見つかりませんでした。