私はLogin
メソッドを含むWCFサービスを持っていますが、ローカルマシンの資格情報とユーザー名とパスワードを検証していて、一見無作為な時間が経過すると一部のユーザーは機能しなくなります。PrincipalContext.ValidateCredentialsを使用してローカルマシンに対して認証するとエラーが発生しますか?
実際のloginコマンドは次のようになります。
public UserModel Login(string username, string password, string ipAddress)
{
// Verify valid parameters
if (username == null || password == null)
return null;
try
{
using (var pContext = new PrincipalContext(ContextType.Machine))
{
// Authenticate against local machine
if (pContext.ValidateCredentials(username, password))
{
// Authenticate user against database
using (var context = new MyEntities(Connections.GetConnectionString()))
{
var user = (from u in context.Users
where u.LoginName.ToUpper() == username.ToUpper()
&& u.IsActive == true
&& (string.IsNullOrEmpty(u.AllowedIpAddresses)
|| u.AllowedIpAddresses.Contains(ipAddress))
select u).FirstOrDefault();
// If user failed to authenticate against database
if (user == null)
return null;
// Map entity object to return object and assign session token
var userModel = Mapper.Map<User, UserModel>(user);
userModel.Token = Guid.NewGuid();
userModel.LastActivity = DateTime.Now;
// Authenticated users are added to a list on the server
// and their login expires after 20 minutes of inactivity
authenticatedUsers.Add(userModel);
sessionTimer.Start();
// User successfully authenticated, so return UserModel to client
return userModel;
}
}
}
}
catch(Exception ex)
{
// This is getting hit
MessageLog.WriteMessage(string.Format("Exception occurred while validating user: {0}\n{1}", ex.Message, ex.StackTrace));
return null;
}
// If authentication against local machine failed, return null
return null;
}
これは、それが突然一部のユーザーのために作業を停止し、この例外をスローします、数日間正常に動作するように見える:
複数のユーザー名を使用して、同じユーザーによるサーバーまたは共有リソースへの複数の接続は許可されません。サーバまたは共有リソースへの以前のすべての接続を切断し、再試行してください。 (HRESULTからの例外:0x800704C3)
System.DirectoryServices.AccountManagement.CredentialValidator.BindSam(文字列対象文字列ユーザ名、文字列のパスワード)で
System.DirectoryServices.AccountManagement.CredentialValidator.Validate(文字列ユーザ名、でCでMyNamespace.LoginService.Login(文字列名、文字列のパスワード、文字列ipAddressの)でパスワード)System.DirectoryServices.AccountManagement.PrincipalContext.ValidateCredentialsで
(文字列ユーザ名、文字列のパスワード)
文字列:\ Users \ユーザーm E \ Desktopは\ somefolderはLoginService.svc.cs \:ライン67
ライン67である:if (pContext.ValidateCredentials(username, password))
それが重要かどうかはわからないんだけど、エラーメッセージの最後の行があります私の開発マシン上のVSソリューションのパスであり、本番サーバー上のファイルへのパスではありません。
失敗すると、一部のユーザーだけが失敗し、他のユーザーは正常にログインできます。私が一時的にエラーを修正するために見つけた唯一の事は、iisreset
です。 Webサイトの停止/開始、またはアプリケーションプールのリサイクルは機能しません。
私はオンデマンドでエラーを再現できません。私は、複数のセッションやIPアドレスから同じユーザーでログインしようとしました。同時に同じブラウザセッションから別のユーザーにログインし、ログインボタンをスパムして複数回実行するようにしましたが、すべてが表示されますうまく動作する。
私は、ユーザーが過去にログインに成功できていることを私たちの伐採から見ることができます:ユーザーがFTPアクセスのためにローカルに作成したアカウントを持っているので、我々は、ローカルマシンに対して認証を行う理由がある
3/21/2013 o 9:03a I logged in o 1:54p UserB logged in o 1:55p UserA logged in o 2:38p UserB logged in o 3:48p UserB logged in o 5:18p UserA logged in o 6:11p UserB logged in 3/22/2013 o 12:42p UserA logged in o 5:22p UserB logged in o 8:04p UserB logged in 3/25/2013 (today) o 8:47a I logged in o 12:38p UserB tries logging in and fails. Repeated ~15 times over next 45 min o 1:58p I login successfully o 2:08p I try to login with UserB's login info and fail with the same error
、および独自のカスタムログインシステムを構築したり、ユーザーに2つの資格情報を記憶させたりすることは望ましくありませんでした。
コードでは、ユーザーの資格情報を認証するだけで、ユーザーの資格情報では何もしません。 System.DirectoryServices
を使用する他のコードはありません。ファイルIOは実行されず、Webアプリケーションを実行するために必要なファイル以外のファイルシステム上のローカルにはアクセスできません。
数日後にこのエラーが一見無作為に表示される原因は何ですか?それをどうやって修正することができますか?
サーバはIIS 6.0を実行する、Windows Server 2003であり、そして私がこの問題を説明する方にオンラインで見つけることができます最も近いユーザーが同じエラーが発生しthis forum post、あるの.NET Framework 4.0
私は数時間を無駄にしました、感謝のrachel、 –