6

各ユーザーの大量のユーザーデータを保存するため、asp.net mvc 1.0 Web アプリケーション用のカスタムログインシステムを構築しました (これにより、Windows 認証用のカスタムテーブルを追加しようとしないことにしました)。ログイン システムは、基本的に SQL Server (2005 または 2008) と、非常に標準的な独自のデータベースとテーブル構造を使用します。ユーザー関連データの他のテーブルにリンクされている一意の ID、ユーザー名、およびハッシュ化されたパスワードを持つユーザー テーブル。

私の質問は、Windows 認証ログインを使用するようにシステムを結び付けるにはどうすればよいかということです。管理者が (システムで定義されているように) ユーザーに対して Windows 認証ログインを選択し、認証に使用できるカスタム テーブルに値を追加できるようにしたいと考えています。

質問の言い回しが間違っている可能性があり、Windows 認証のしくみを誤解している可能性がありますが、Web アプリケーションでオプションを提供したいと思います。

4

3 に答える 3

8

サイトで Windows 認証が有効になっている場合は、User.Identity.Name を使用して、現在ログインしているユーザーの NT/Active Directory ユーザー名を取得し、それをユーザー テーブルの列と照合できるはずです。

于 2009-09-10T15:45:50.333 に答える
8

ハイブリッド フォーム/Windows 認証アプリでこれを行う方法は次のとおりです。

public class MyBaseController
{
  protected override void OnAuthorization( AuthorizationContext authContext )
  {
    if
    (
      !User.Identity.IsAuthenticated &&
      Request.LogonUserIdentity != null &&
      Request.LogonUserIdentity.IsAuthenticated
    )
    {
      String logonUserIdentity = Request.LogonUserIdentity.Name;
      if ( !String.IsNullOrEmpty(logonUserIdentity) )
      {
        User loginUser =
          Context.Users.FirstOrDefault(
            x => x.UserIdentity == logonUserIdentity);
        if ( loginUser != null )
          FormsAuthentication.SetAuthCookie(
            loginUser.LoginName,createPersistentCookie);
    }
  }

コンパクトにするために取り出したカプセル化がいくつかあります。

于 2009-09-10T15:46:31.660 に答える
1

私があなたの質問を正しく理解していれば、Windows 認証ユーザー名にリンクされた他のデータを追加したいですか?

その場合、ユーザー名とこのカスタム情報を新しいテーブルに保存する必要があります。Windows 認証データは Active Directory に存在するため、そこを調べてユーザーのリストを取得できます。Windows がユーザーを認証するときに、カスタム情報が AD に自動的に追加されることはありません。カスタム情報が必要な場合は、AD にカスタム ルックアップを追加するか、情報を保存する場所に応じてデータベース内のカスタム データをルックアップする必要があります。

Windows 認証で取得できるのは、ユーザーのユーザー名と、そのユーザーに関連付けられたロール (AD グループ) を確認する機能だけです。それを超えるものは、手動でコーディングする必要があります。

私は最近、MVC の組み込みセキュリティを超えたカスタマイズの実装について質問し、自分で解決策を考え出しました。あなたの質問に答えるのに役立つヒントがいくつかあるかもしれません:

セッションデータに基づいて ASP.NET MVC で承認チェックを実装する方法は?

于 2009-09-10T15:44:43.300 に答える