8

私は、モバイル アプリと API の間で何らかのパスワードなしのログインを構築することに興味があります (両方を制御できると仮定します)。動機は、ログインしなければならないことはユーザーにとって非常に煩わしく、セキュリティ上のリスクがある (たとえば、ユーザーが既存のパスワードを再利用する) ことであり、ユーザーがすぐにアプリを使い始められるようにしたいと考えています。

うまくいくテクニックがあるかどうか疑問に思っています。例えば:

  1. モバイル デバイスでランダムなログイン/パスワードを生成し、パスワードをキーチェーンに保存します。
  2. このログインとパスワードの組み合わせを使用して API にサインアップします。これはトークンを返します。
  3. トークンは後続の呼び出しで使用されます

欠点は次のとおりです。

  • ユーザーがアプリを削除すると、ログイン/パスワードが失われる可能性があります (これは、iCloud を使用してログインを保存することで緩和される可能性がありますが、パスワードには悪影響を及ぼしますか?)
  • パスワードはデバイスに保存されます(ただし、キーチェーンにはあります)

だから私の質問:このようなことは実現可能で安全ですか?それを行うための既知の手法はありますか?

4

2 に答える 2

8

行ったことは次のとおりです。

基本的に、この考え方は、ほとんどのサービスが提供する「パスワードを忘れた場合」によく似ています。

  1. ユーザーに電子メールを要求する
  2. アクティベーション リンクを記載したメールを送信します。電子メールには、 のようなワンタイム トークンを含むディープリンクが含まれていますmyapp://login?token=.....
  3. ユーザーは、アプリがインストールされているデバイスで電子メールを開きます。これは、ディープ リンクが機能するために重要ですが、いずれにせよ 99% のケースで発生します。ユーザーがディープリンクのあるボタンをクリックする
  4. ユーザーはアプリにリダイレクトされます。アプリのディープリンクからトークンを抽出し、それをサーバー API に送信して認証します。認証が完了したら、ユーザーのセッションを作成して、再度認証する必要がないようにします。

いいもの:

  1. より安全:ユーザーは新しいパスワード (通常は単純すぎる) を考える必要がなく、ユーザーがパスワードを再利用するリスクもありません。開発者である私たちにとって、これは、理解しやすく保護しやすい認証パスが 1 つしかない (そして単純な!) ソリューションを提供します。また、ユーザーのパスワードやハッシュ化されたパスワードに触れる必要はありません。
  2. ユーザーへのよりスムーズなオンボーディング フロー:入力フィールドに電子メールを事前に入力すると、ログイン フローは 2 ボタン クリックと短くすることができます。従来のログインにも追加の入力フィールド)

あまり良くない:)

  1. ユーザーはこのフローにあまり慣れていない可能性があり、なぜパスワードが必要ないのか不思議に思うかもしれません。「パスワードが必要ない理由」を説明する小さなリンクを追加します。
  2. アプリが削除された場合、またはユーザーがログアウトした場合は、メールを使用して再度ログインする必要があります。これは、ユーザーが時々ログアウトしたりログインしたりしないモバイルアプリではあまり問題になりません。

このフローは既にアプリに実装しています。詳細については、 http ://www.drzon.net/passwordless-login-in-mobile-apps/ をご覧ください。

その他の考慮事項:

  • 安全性を高めるには、トークンを 1 回だけ使用できるようにし、有効期限 (1 時間など) を設定します。電子メール アドレスと共に何らかの種類の一意のデバイス ID をサーバーに送信することで、トークンを特定のデバイスに関連付けることもできます。このようにして、ユーザーは単にメールを別の人に転送することはできず、代わりにメールを開きます
  • ディープ リンクについて - 一部のメール プロバイダーは、app://. これを克服する方法は、代わりにリンクをサーバーに向けて、実際のディープリンクにリダイレクトすることです https://myserver.com/login?token=...--->myapp://login?token=...

Mozillaもそれについてここに書いた

于 2014-10-31T16:07:14.740 に答える
2

これは非常にオープンエンドですが、一般的には、車輪を再発明するのではなく、OAuth や OpenID Connect (OAuth を使用) などの標準ソリューションを使用してください。これには、ユーザーがトークンを取得するために WebView などを介してログインする必要があるという欠点がありますが、パスワードを保存する必要はありません。

考慮事項:

  • サーバーもそれを知る必要があるため、ランダムなパスワードを実際に生成することはできません
  • Android には公開キーチェーンのような API がないため、自分でパスワードを保護する必要があります。

「十分に安全」に関しては、ほとんどの人が最近 (Twitter、Facebook など) OAuth を使用しているため、少なくとも証明されています。実際のセキュリティは、特定の実装によって異なります。

于 2012-09-25T04:07:00.103 に答える