web-dev-qa-db-ja.com

Ionic / Cordovaアプリでの認証

まず、私はプロではありません。

より良い開発者になるための探求では、Ionic-Frameworkアプリのサインアップ/ログインを作成する方法と必要なものを理解しようとしています。

ほとんどの単一ページアプリケーション(SPA)は、クライアントのHTMLも提供しているノードサーバーで認証を処理します。私の場合、電話自体がHTMLを提供するので、CORの問題に直面する可能性があります。

Ionic-Frameworkは状態を使用し、ベースの angular-client-side-auth repoであることを理解しています。アプリの状態を変更するたびに認証を行う必要があります。

私は最初のアプリのセットアップを持っていますが、ここからどこへ行くのかちょっと混乱しています。

私が自由に使えるツール:

  • Node.JSサーバー-DigitalOceanに感謝します(これをDBのプロキシとして使用する必要がありますか?)
  • CouchDBサーバー(ここにフルスタックがあります)

私の質問:

  1. ハイブリッドアプリを使用する場合の認証の標準的なアプローチは何ですか?
  2. Node.JSをデータベースのプロキシとして使用する必要がありますか?
  3. Node.jsをスキップして、CouchDBサーバーで直接認証する必要がありますか? (私はこれを聞いたことがあります)
  4. 私はこれについてすべて間違った方法で行っていますか?
  5. 私の潜在的な障害は何ですか?
  6. CORSはハイブリッドアプリケーションとどのように連携しますか?
  7. 不足しているものはありますか?

私がより良い開発者になるのを助けてくれてありがとう。

65
TyMayn

OK、答えがたくさんあります。ただし、簡単な答えは、通常のWebアプリと同じように、物事をシンプルに保ち、認証することです。

通常のWebアプリの場合:

  • 通常のWebアプリでは、サーバーにリクエストを送信し、データベースで資格情報を確認してユーザーを認証します

モバイルアプリの場合:

  • モバイルアプリでは、ajaxリクエストを介して同じことを行います(アンギュラーの場合は$ httpを使用します)。
  • サーバーでの認証が完了した後、フロントエンドに認証の結果を示す応答(json/xmlなど)をアプリに送り返します。

標準的なアプローチは何ですか?

  • 標準についてはわかりませんが、これが最も簡単なアプローチのようです。より良い方法が常にあるため、標準は常に変わります。ですから、仕事がやり遂げられる限り、後で改善してください。

Node.JSをデータベースのプロキシとして使用する必要がありますか?

  • NodeJをあまり使用していないので、実際に何を意味するのかわかりません。しかし、それが知るのに役立つ場合-私はajaxリクエストを受信するサーバーでphpを使用し、mysqlデータベースで認証を処理し、モバイルアプリに応答を返します。

私はこれについて間違った方向に進んでいますか?

  • 私はあなたの初期設定を見ていません。アプリの状態を変更するたびに認証を行う限り、ログインが成功した後にlocalStorageを使用してユーザー情報を保存できます。ログアウト時に、localStorageをクリアします。そのため、ユーザーがログインしているかどうかを確認するためにlocalStorageに値が存在するかどうかを確認するだけです。

私の潜在的なロードブロッキングは何ですか?

  • アプリの作成を開始することをお勧めします。すぐにわかります。全体的に、ion + cordovaは物事を非常にシンプルにし、アプリ開発の障害のほとんどを取り除きます。

CORSはハイブリッドアプリケーションでどのように機能しますか?

  • Cordovaはデフォルトでクロスドメインリクエストを許可しているため、クロスドメインリクエストで問題が発生することはなく、認証のためにサーバーに直接アクセスできます。

不足しているものは何ですか?

  • IonicFramework は単なるフロントエンドHTML5フレームワークです。それだけでは、モバイルアプリにすることはできません。 IonicFrameworkは、Angularを使用して実装するニース javascript機能 を提供します。したがって、ionicを最大限に活用するには、angularJsに習熟する必要があります。学習angularは努力する価値があります。

  • 実際のアプリはCordovaによってコンパイルされます。 Cordovaは通常のhtml/css/javascriptファイルを取得し、それらをAndroid apkまたはiphone ipaにパッケージ化して、ネイティブアプリとしてそれぞれのOSにインストールできるようにします。

  • Cordovaは、カメラ、ギャラリー、連絡先などのネイティブの電話機能にアクセスできるようにするものです。

2015年6月3日に更新

トークンベースの認証:私は代替手段であると信じています。これは、認証を処理するためのよりクリーンで安全な方法であり、簡単に利用できるようになりました。

詳細については、次のリンクをご覧ください。

トークンベースのアプローチを使用する利点は何ですか?

クロスドメイン/ CORS:Cookie + CORSは、異なるドメイン間でうまく機能しません。トークンベースのアプローチにより、HTTPヘッダーを使用してユーザー情報を送信するため、任意のドメインで任意のサーバーに対してAJAX呼び出しを行うことができます。ステートレス(別名サーバー側のスケーラビリティ):なしセッションストアを保持する必要がある場合、トークンはすべてのユーザー情報を伝達する自己完結型のエンティティであり、残りの状態はクライアント側のCookieまたはローカルストレージに存在します。

CDN:CDNからアプリのすべてのアセット(javascript、HTML、画像など)を提供でき、サーバー側はAPI。分離:特定の認証スキームに縛られていません。トークンはどこでも生成される可能性があるため、これらの呼び出しを認証する単一の方法で、どこからでもAPIを呼び出すことができます。

モバイル対応:ネイティブプラットフォーム(iOS、Android、Windows 8など)で作業を開始するとき、安全なAPIを使用する場合、Cookieは理想的ではありません( Cookieコンテナを処理する必要があります)。トークンベースのアプローチを採用すると、これが大幅に簡素化されます。 CSRF:Cookieに依存していないため、クロスサイトリクエストから保護する必要はありません(たとえば、サイトでそれを行うことはできません。POSTリクエストを生成し、存在しないため、既存の認証Cookie)。

パフォーマンス:ここではハードなパフォーマンスベンチマークを提示していませんが、ネットワークラウンドトリップ(データベースでセッションを見つけるなど)は計算よりも時間がかかる可能性がありますトークンを検証し、その内容を解析するHMACSHA256.

ログインページは特別なケースではありません:Protractorを使用して機能テストを記述する場合、ログインのために特別なケースを処理する必要はありません。標準ベース:APIは標準のJSON Web Token(JWT)を受け入れることができます。これは標準であり、複数のバックエンドライブラリ(.NET、Ruby、Java、Python、PHP)とインフラストラクチャを支援する企業(例:Firebase、Google、Microsoft)があります。例として、Firebaseでは、特定の定義済みプロパティを使用してJWTを生成し、共有シークレットで署名してAPIを呼び出す限り、顧客は任意の認証メカニズムを使用できます。

77
Varun Nath

nathvarunは非常に完全な答えを出しましたが、アプリで認証のために行う手順を共有したいと思います。

  1. email + passwordをajax経由でサーバーに送信します
  2. サーバーでtokenを生成し、アプリに送り返します
  3. emailtoken + localStorageを保存
  4. サーバーへのすべてのリクエストに対して、email経由でtoken + POSTを送信します
  5. サーバーでは、そのトークンを使用してそのユーザーの信頼性を検証します。trueメソッドが実行された場合、false場合、アプリにエラーを返します(401)
  6. アプリが成功した場合は問題ありません。エラーが発生した場合はログイン画面にリダイレクトします。

良いことは、アプリが開いているときに、email + tokenlocalStorageから取得し、サーバーに送信できることです。そのトークンがそのユーザーにとって問題なければ、リダイレクトしますそれ以外の場合は、ログインにリダイレクトします。その後、ユーザーがアプリのキャッシュをクリアするたびに、ログイン画面にリダイレクトされます。

44
Lucas Garcia

私が実際に取り組んでいるいくつかのアプリには、そのようなものが必要でした。私はこれを調査するのにかなりの時間を費やし、それを達成することができました。

結果にかなり満足しています。メール/パスワード認証に加えて、同じように機能するソーシャル認証を追加しました。

  1. ログイン用にプロバイダーの(facebook/Twitter/instagram)URLを使用してクライアント側でURLを開く
  2. ユーザーがログインし、サーバーのコールバックURLにリダイレクトされます(私のサーバーはnodejsで記述されています)
  3. プロバイダーからアクセストークンを取得したら。このトークンを保存し、ユーザーが保護されたリソースにアクセスするたびにクライアントが再利用できるトークンを作成します。

apk をダウンロードしてテストします。

これがあなたが探しているものであるなら、あなたは両方のクライアント側コードをチェックアウトすることができます: https://github.com/malikov/Authenticate.me-client-cordova-ionic

サーバーサイドのコード: https://github.com/malikov/Authenticate.me-Node-Server

1
malikov