如何在本地环境中更改HttpApplication.User.Identity.Name?

时间:2008-10-28 17:37:09

标签: c# .net security authentication

我有一个需要Windows身份验证的网站,一旦用户认可,应用程序就会从Security.Prinicipal获取凭据问题是我的本地环境中的凭据与存储在数据库中的凭据不同,用户首选项不能获得。我正在做以下的解决方法来处理这个问题。

    #if DEBUG
      var  myUser = userBL.GetSingle(@"desiredDomain\otherUserName");
    #else 
       var myUser = userBL.GetSingle(HttpApplication.User.Identity.Name);
    #endif
        Session.Add("User",myUser);

有没有其他方式而不是模仿或上面提到的workaorund来改变HttpApplication.User.Identity.Name的值这是因为我每次需要提交到存储库或部署App时都必须更改我的代码< / p>

3 个答案:

答案 0 :(得分:2)

虽然您可以更改userBL,但为什么不改变数据库记录以反映它们位于不同的域中。我假设您没有访问生产数据库,因此“清理”步骤应该没有问题,这使得数据库可用于开发/测试。

e.g。

UPDATE Users 
SET 
    UserName = REPLACE(UserName, '\\ProductionDomain\', '\\DevDomain\')
  1. 使用#if DEBUG对这类事情不利。有人可能/应该合法地在生产中加载调试版本的代码,并且所有突然登录都被破坏。这些东西在需要时可以在web.config中得到更好的控制。
  2. 开发人员应该反对数据库的开发副本。在制作副本时,清理数据库的某些方面是非常典型的。有时这是针对隐私法规(例如,模糊用户的真实姓名和登录)

答案 1 :(得分:0)

您是否考虑过在Web.Config中使用Impersonation将id设置为您的测试凭据。我认为你有一个“测试”web.config和一个“生产”web.config。通过这种方式,您无需担心在上线时将其删除。

答案 2 :(得分:0)

我之前通过将其包装在实用程序方法中来完成此操作。如果HttpContext.Current不为null,请从那里获取它。否则从WindowsIdentity.GetCurrent()获取它。