web-dev-qa-db-ja.com

ネイティブモバイルクライアントでの認証、承認(Android)

購入を可能にするためにユーザー認証を必要とする店舗向けのネイティブモバイルクライアントを開発しています。
Webストアページがあります。認証はCMS(OpenCart)によって提供されます。
次に、モバイルデバイスに安全で堅牢なログインを実装する必要があります。
私はREST Webサイト(製品、販売....)からデータ公開データを取得するためのAPIを使用しています。).
しかし、ネイティブのモバイルクライアントとWebサーバーの間に安全な接続を提供する必要がある場合、何が最善の選択でしょうか。
「ネイティブ」を使用して、アプリにWebビューなどが表示されないことに気づきました。

人気のオンラインストア(ALi、Ebay、Amazon)からの同様のアプリがたくさんあります。これらのアプリはすべて、メカニズムが組み込まれていないブラウザーを使用して認証を使用します。これをどのように実装するのでしょうか。

ネイティブクライアントでユーザーの重要なアクションを保護するために可能な方法は何ですか。

もちろん、私はこれについてたくさん読んだことがありますが、利用できるアプローチを説明する記事だけでなく、良い解決策はありません。

これを行うには、安全で堅牢で、それほど難しくない方法を提案してください。

よろしくお願いいたします。

2
CROSP

アプリの詳細を理解していなければ、この質問に対する多くの正しい答えがあります。

一般的な戦略の1つは、ユーザー名/パスワードを使用してAPIに対する認証を行うことです。認証が成功すると、APIは認証トークンを作成して返します。その後、アプリは後続の各呼び出しで認証トークンを渡します。

認証トークンの一般的な形式は次のとおりです

username + other data + HMAC(user + data, secret known only to the server)

サーバーは、後続の呼び出しで認証トークンを受信すると、ユーザー名とその他のデータ(保存したいものは何でも)を解析し、HMACを実行してから、トークンのHMACと比較します。一致する場合は有効なログインがあり、それ以外の場合は試行をログに記録して中止します。

この戦略では、重要な情報を認証トークンに格納できるため、サーバーをステートレスにすることができます。サーバーでセッションを維持する必要がある場合は、次の形式の認証トークンを使用できます。

session ID + HMAC(session ID, secret known only to the server)

あなたはおそらくsession IDクライアントがシークレットなしでトークンを偽造できない場合でも、クライアントが他のセッションIDを推測できないようにするため、カウンタやメモリポインタではなく、安全な乱数にしてください。

2
Neil Smithline