2

Angular を使用して構築されたアプリケーションがあります。また、アプリケーションはバックエンド REST API をトリガーしてデータを表示します。

問題は、

アプリケーションはLDAP SSO認証を使用してユーザーを検証します(社内アプリケーションであるため、外部ユーザーはいません)

手順は、

  1. ユーザーがサイトを起動すると、ユーザーが認証用のユーザー名とパスワードを提供する WebSec ログインにリダイレクトされます (暗黙的なフロー)。

  2. 認証が成功したら、WebSec からのアクセス トークンを JWT します。これはセッション ストレージに格納され、バックエンド サービスの「ベアラー」トークンとして使用されます。

  3. バックエンド サービスには、この JWT トークンを検証するための WebSec 証明書があり、そうでない場合は認証エラーで応答します。

フロント エンドの場合 - Angular を使用しています。バック エンドの場合 - Java、Sprint ブートです。

質問は、

  1. これはユーザー認証の正しい方法ですか?
  2. もしそうなら、Implicit フローはどれくらい安全ですか。参照: https://www.instagram.com/developer/authentication/ - 誰もが明示的なフロー (サーバー側の呼び出し) を推奨しています。UI アプリは別のサーバーで維持され、バックエンド サービスは別のサーバーで維持されます。

誰かがこれに関する解決策を提供してくれれば幸いです。

4

2 に答える 2

3

暗黙的なフローの問題は、JWT トークンが URL に存在することです。暗黙的なフローは、フロントエンドまたはバックエンドで実装できます。どちらも推奨されませんが、フロントエンドで実行すると、より多くの脆弱性が発生します。これは、あなたの質問を正しく理解していれば、あなたがやろうとしていることです。

私はそれを次の方法で実装します。

  1. フロントエンドは WebSec ログインにリダイレクトされます
  2. ログインに成功すると、WebSec はバックエンドにリダイレクトします
  3. バックエンドが JWT トークンを取得する
  4. バックエンドがワンタイム トークンを作成し、そのワンタイムトークンを使用してフロントエンドにリダイレクトします
  5. フロントエンドはワンタイム トークンを取得し、そのトークンをバックエンドにPOSTして JWT トークンを取得します
于 2019-07-19T09:08:47.507 に答える