2016-04-15 13 views
0

OK。だから、私はiOS認証のnoobの総数なので、いくつかのガイダンスが必要です。ウェブサーバーへのiOS認証

私は単純なアプリを持っています。ユーザーはアプリにログインし、友人にメッセージを送信できます。ユーザーとログイン情報を保持するWebサーバーとMySqlデータベースがあります。

質問:ユーザーがsafelysecurelyにログインしたときに、ユーザーを認証するにはどうすればよいですか?

私はグーグルから見つかった次の認証のものに私の脳傷つけ最後の数時間を費やしている:

  1. のOAuth 1.0を - 良いと言われています。しかし、これはプロトコルであり、ライブラリではありません。私はゼロからこれを実装する必要がありますか?私の場合、これは認証のために必要なのでしょうか?
  2. OAuth 2.0 - これは一部のサイトで使用されているようです。私はバージョン1.0と同じ質問があります。私もこのメッセージを見ましたfrom the library's lead creator文字通りf ***バージョン2.0と言っていました。しかし、まだ多くの人がそれを使い続けています。それは危険ですか?
  3. 2.0の作成者は、2.0がどれほど悪いか、1.0のスケーラビリティのためにcompletely other libraryになりました。彼の図書館はOZと呼ばれています。私は私のサーバーにこれを使用する必要がありますか?
  4. AlamoFire/AFNetworkingには、基本的な認証がドキュメントに記載されています。私はちょうどoAuthのものをねじ込んで、それらのものを使うべきですか?

すべてのことが私には非常に混乱しています。これに精通している人は、何らかのガイダンスを提供できますか?

答えて

1

私は現在、クロスプラットフォームアプリケーションを作成しており、これを研究するのにかなりの時間を費やしています!

私のアプローチは、OWINミドルウェアを使用したASP.NET Web APIの使用です。

これは、ベアラトークンを使用してを認証します。 現在、私は、REST APIのユーザーを作成するには、役割、あるいは個々のユーザー(Autherization)

までのエンドポイントを制限することができMicrosoft.Identityを使用して、彼らは/tokenエンドポイントで-にログインして、トークンを受け取ります。このトークンは、アップルのキーチェーンに保存され、APIへのさらなるリクエストのためにユーザーを認証するために使用できます。

SSLを使用している限り、これは安全な方法であり、多くのアプリケーションで広く使用されています。

このアプローチではOAuth2も使用されるため、Facebook/Google/etcの統合を簡単に統合できます。ここで

は、私はそれをやった方法についていくつかのさらなる読書のためのMicrosoftのドキュメントへのリンクです: http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api

現在、これは、角度のフロントエンドのために私のために完璧に機能していますが、以外のiOSでまったく同じに動作しますトークンをKeyChainストレージに保存することができます。

+0

Hmm。私は一種のマイクロソフトの事に驚いた。私のサーバーでは、残念ながらMicrosoftには何も使用できません。 –

1

ほとんどの場合、認証を処理するためにiOSでカスタムシステムを作成するOAuth 2を使用します。

防弾は一切ありませんが、2トークンシステムでは、資格情報を盗む可能性は非常に低くなります。

あなたが見つけたAlamoFire、AFNetworking、またはその他のライブラリは、これとは関係ありません。使用する資格情報のタイプは、選択したものか、APIの選択かによって異なります。これらのツールを使用してAPIとのコミュニケーションを簡単にすることができます。

これは、ログイン時にユーザー名とパスワードを1回だけ送信しようとしてから、さらに通信に使用される2つのトークンを受け取ることになります。これにより、誰かがユーザーデータへのアクセスを得るための最終的なキーであるユーザー名とパスワードでリクエストを傍受する機会が減ります。

次は新しい「アクセストークン」を受信するための「リフレッシュトークン」です。この呼び出しは数時間ごとに行われる必要があります(APIによって制御されます)。誰かがこのトークンを盗むことになった場合、それを使用して無限の期間、または所有者がリフレッシュトークンを無効にするまでアクセスを増やすことができます(これは「すべてのデバイスからログアウト」をクリックすると起こります)。だから誰かがそれを得るなら、これはまだかなり悪いです。

さらに、アクセストークンがあります。このアクセストークンは、サーバーへの要求ごとに使用されます。これらのトークンは無効にされるまでの時間が限られているので、誰かが何らかの形でそれを傍受した場合、トークンの持続時間の間データにアクセスすることになります。

  • あなたがアクセストークンを持っているし、有効である場合は、受信した場合、単純にサービス
  • を使用しますので、これはこれはあなたが何をする必要があるかであるバックエンドで行われる手続きであると仮定し

    アクセストークンが無効であるというエラー。リフレッシュトークンを使用してアクセストークンをリフレッシュする必要があります。

  • リフレッシュトークンでエラーが報告された場合は、ログイン画面に戻る必要があります。
  • アプリにリフレッシュトークンがない場合は、ログイン画面

リクエストが無効なトークンを報告し、リクエストを保留し、トークンをリフレッシュしてから、保留中のリクエストを再度呼び出すようなものがあります。この周りのシステムはかなり大きいかもしれません。

これはトークンと認証に関するものですが、httpsの安全な接続を使用するなど、セキュリティを向上させる通信の他の部分があります。セキュリティについて話すときは、コミュニケーションのあらゆる部分を調べる必要があります。

+0

okだから、OAuthの内容は完全にServer API側にあると思うので、クライアントアプリ側でそのことについて心配する必要はありませんか? –

+0

常にサーバー側をロックダウンしますが、より包括的な解決方法を可能な限りクライアントに制限してください。 – Harvey

+0

いいえ、OAuthはデータ転送をより安全にするマネープロテクションシステムの1つに過ぎないと言います。これは、同じレイヤーで実行される他のシステムには排他的ですが、セキュリティーを検討する際に考慮する必要がある他のレイヤーもあります。 OAuthがどのように機能しているかを理解し、アイデアが何であるかを理解することで、そのアイデアを使用して、他に使用できるものや接続を改善する方法を理解することができます。 –