8

エンタープライズ環境で新しい Web アプリをサポートする場合、実際に発生している、または認識されている問題を診断するために、特定のユーザーとしてログインすることが必要になることがよくあります。ここでは、相反する 2 つの問題が適用されます。

  1. ベスト プラクティスは、クリア テキストではなく、ハッシュ化または暗号化されたパスワードを使用することです。中間にサードパーティの SSO (シングル サインオン) が存在する場合があります。ユーザーのパスワードを取得する方法はありません。ユーザーが提供しない限り (推奨されません)、そのユーザーとしてログインする方法はありません。

  2. 多くの Web アプリには、パーソナライゼーションと複雑な認証があります。異なるユーザーには、異なる権限を持つ異なる役割 (管理者、マネージャー、ユーザー) があります。場合によっては、ユーザーは自分のデータ (顧客またはタスク) しか見ることができません。読み取り専用アクセス権を持つユーザーもいれば、編集できるユーザーもいます。そのため、Web アプリの各ユーザーのビューは一意です。

企業環境では、ユーザーのデスクに行ったり、ユーザーのマシンに直接接続したりすることは現実的ではないと仮定します。

この状況をどのように処理しますか?

編集: 繰り返しますが、大規模な金融機関や、全国および世界中に数十万人の従業員を抱える典型的なフォーチュン 500 企業では、一部の IT 部門の単なる開発者が直接できることは不可能です。ユーザーのマシンにアクセスします。それらの一部は、顧客が使用する公開 Web アプリ (オンライン バンキングや株式取引など) です。また、それらの多くは、Active Directory または SSO に依存するイントラネット アプリケーションです。つまり、多くのアプリケーションでユーザー資格情報が同じであることを意味します。皆さんの提案に感謝します。他の種類の環境で非常に役立つものもあります。

4

7 に答える 7

19

これらのアイデアの多くは、ユーザーにパスワードの変更を強制したり、デバッグ セッションのためにデスクトップを占有したりして、ユーザーに不便をもたらします。

Markc のアイデアは最高です。認証ロジックを拡張して、ユーザーの資格情報ではなく、ユーザーの名前とスーパーユーザーの資格情報を提供することで、スーパーユーザーが特定のユーザーとしてログインできるようにします。

私は過去にこのようにしました(疑似的なpython):

if is_user_authenticated(username, userpassword):
    login the user
else if ':' in userpassword:
    supername, superpassword = userpassword.split(':')
    if is_superuser_authenticated(supername, superpassword):
        login the user

つまり、ユーザー名とパスワードが認証されない場合、パスワードにコロンが含まれている場合、実際には管理者ユーザー名と管理者パスワードがコロンで結合されているため、正しい管理者ユーザー名とパスワードである場合はユーザー名としてログインします。

これは、ユーザーの秘密を知らなくても、ユーザーに迷惑をかけることなく、ユーザーとしてログインできることを意味します。

于 2008-11-04T21:28:42.353 に答える
5

私たちの Web アプリケーションでは、適切な用語がないため、ユーザー アカウントの「ハイジャック」と定義されるプロセスを使用しています。

基本的に、管理者はボタンをクリックするだけでユーザーのアカウントを「乗っ取る」ことができます。コードでは、一意の識別子 (ユーザー ID は安全性の低い環境で機能します) を使用するだけで、セッションで必要な資格情報が確立され、そのユーザーのプロファイル内で機能できるようになります。より安全な環境のために、各ユーザーに一意のハッシュを使用できます。

この乗っ取り方法が安全であることを確認するために、まず、適切な権限を持つ認証済みの管理者によって要求が行われていることを確認します。このため、誰かがアプリケーション内のハイジャック機能を悪用するには、管理者のセッションをハイジャックするか、認証資格情報を取得する必要があります。

于 2008-11-04T21:03:49.003 に答える
2

4つのアイデアがありました。私が入力している間に、そのうちの 3 つが既に提案されていました (そのため、私はそれらに賛成票を投じました)。

アイデア 3 のバリアント - なりすまし:

これを最小限のコード変更で通常のログインと「できるだけ同一」にするために、管理者の資格情報と別のユーザー名を提供することで、ログイン時に直接偽装する機能を追加できます (例: Admin:user、adminpassword としてログイン)。システムはこれを、userpassword を使用してユーザーとしてログインするものとして正確に処理します。

アイデア 4: パスワード ストアにアクセスできますか? その場合、一時的にユーザーのハッシュを既知のパスワードのハッシュに置き換えます。(多くの場合、パスワードはデータベースにオンラインで保存されます。SQL クエリ ツールで交換できます)

于 2008-11-04T21:05:18.297 に答える
1

管理者は、ユーザーのパスワードを変更できる必要があります。ユーザーのパスワードを知っているものに変更します。その後、そのユーザーとしてログインできます。

デバッグが完了したら、パスワードをリセットするようユーザーに伝えます。

于 2008-11-04T20:50:21.573 に答える
1

通常、デスクトップを表示するために使用できる何らかのリモート コントロール ソフトウェアを使用します。それらが Windows ターミナル サーバー上にある場合は、組み込みの管理ツールを使用できます。それ以外の場合は、内部ネットワークで VNC のようなものを使用するか、LogMeIn ( http://www.logmein.com/ ) のような外部サービスを使用します。

于 2008-11-04T20:51:54.673 に答える
0

Webアプリで使用したソリューションは、authN/authZが目的のユーザーを有効なユーザーとして返すようにすることです。これを行うには、マスカレードを設定するための管理機能を使用します。次に、現在ログインしているユーザー(current_user)を要求すると、マスカレードを処理します。

  def current_user_with_effective_user
    if masked?
      current_user_without_effective_user.masquerade_as
    else
      current_user_without_effective_user
    end
  end
  alias_method_chain, :current_user, :effective_user
于 2009-05-15T17:26:12.107 に答える
0
  1. ライブデータの定期的なカットがコピーされるテスト環境がありますか(セキュリティまたはデータ保護の問題を満たすために明らかにサニタイズされています)。問題が発生したユーザーとセットアップが似ているユーザーをトラブルシューティングに使用するか、許可されている場合は実際にそのユーザーを使用できます。

  2. 他の回答で述べたようにリモート デスクトップ クライアントを使用しますが、これも実用的ではない場合があります。ドメイン内でこれらの権利を持っている場合は、スクリーンスクレイプを行ってログに記録するエラー処理についても聞いたことがあります。しかし、これは私には少し奇妙に聞こえます。

  3. ユーザーをデモアカウントに複製するための管理ツールはありますか?

于 2008-11-04T21:02:52.450 に答える