私はjzに自分のAngularアプリケーションへのちょっとしたハックを完了させました。まず、PUBLIC、MEMBER、ADMINアクセスロールを使用したメニューナビゲーションのリストがあります。ログイン時に、PUBLICリンクとMEMBERリンクを表示できるユーザーにロール「MEMBER」を保存しました。(Chromeを使用)しかし後で私はオンにします
Developer Tools > Application > Storage > Session Storage
'role'変数を 'MEMBER'から 'ADMIN'に操作すると、秘密の管理者リンクを表示できます。
これはコーディング構造の問題ではなく、「セッション変数を安全な方法で保存する方法」です。その前は、PHPのセッション変数は「セッションストレージ」と同等だと思っていました。コミュニティでは、SESSIONはユーザーhttps://stackoverflow.com/a/6912409/8163746で変更できないと言っています。
次に、サーバー側とクライアント側の2種類のセッションがあることを学びました。標準のAngularアプリの場合、「メール」、「役割」のような取引を保存するための最良の方法は何ですか?それでもユーザーが変更することはできませんか?セッションでそれらが必要な理由は、簡単に呼び出すことができるからです。
Role - Show/Hide navigation menu items
Email - to perform SQL filter, SELECT fields FROM Record WHERE email=Session.Email
アドバイスをありがとう。
ブラウザ上のすべては、ユーザーが変更できます。したがって、アクションを実行する前に、サーバーで選択したセッションメカニズムも検証する必要があります。
たとえば、Json Web Token(JWT)を使用できます。
APIを使用してログインすると、APIは安全なトークンを生成し、認証が成功するとクライアントに送信されます。その安全なトークンは暗号化されており、ユーザーIDや役割などの情報を含めることができます。
その後、そのトークンはブラウザに保存されます(ローカルストレージ、セッションストレージ、またはCookieのいずれかに)。Cookieは最も安全なオプションであり、認証がAngularUniversalで機能することを可能にします
トークンは各API呼び出しに沿って渡されます。Cookieを使用している場合、Cookieは自動的に渡されます。ローカルストレージまたはセッションストレージを使用している場合は、を作成しHttpInterceptor
てトークンをリクエストに追加できます。
次に、APIは、アクションを実行する前に、トークンが有効であり、ユーザーロールであることを検証します。
したがって、クライアント側でユーザーロールを保存し、クライアントがそのロールを変更した場合でも、アクションはAPI側で実行されません。これが最も重要です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加