0

イントラネットのみの設定で使用される MVC5 サイトを構築しています。ここの社員はPCを共有して仕事をしているため、サイトにログイン/ログオフ機能を組み込む必要があります。アプリケーションは Active Directory に対して認証されます。

ここで認証が機能しています。ただし、ページがユーザーを returnUrl に戻すと、User.Identity.IsAuthenticatedとのRequest.IsAuthenticated両方が false になります。これにより、以前にその動作を正常に完了したにもかかわらず、ホームページに「サインイン」のオプションが引き続き提供されます。

ユーザーが正常にサインオンしたことを MVC に通知するにはどうすればよいですか?

Web.config から:

<authentication mode="Windows" />

アカウント コントローラーから:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        using (var pc = new PrincipalContext(ContextType.Domain))
        {
            if (pc.ValidateCredentials(model.UserName, model.Password, ContextOptions.Negotiate | ContextOptions.SimpleBind))
            {
                FormsAuthentication.SetAuthCookie(model.UserName, false);
                return RedirectToLocal(returnUrl);
            }
            else
            {
                ModelState.AddModelError("", "Invalid username or password.");
            }
        }
    }

更新 デフォルトの MVC コードは、標準のインターネット ログイン用にこのメソッドを作成します。オブジェクトを生成する方法を理解しようとしているClaimsIdentityので、それを利用することもできます。

private async Task SignInAsync(ApplicationUser user, bool isPersistent)
{
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
    var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
    AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
}
4

1 に答える 1

0

あなたがntlm認証の正しい方法でそれを行っているかどうかはわかりません。基本的に、「別のユーザーとしてサインイン」ボタンをサイトに追加し、イベント ハンドラーにユーザー 401 応答を返し、クライアントで Windows ログイン ポップアップを起動して資格情報を入力することができます。この投稿をご覧ください。

于 2013-11-14T18:45:45.723 に答える