2016-09-01 10 views
0

Сценарий: у меня есть Visual Studio Express 2012 для Интернета. Я тестирую функциональность Logout моего сайта, когда никто не аутентифицирован (гостевой режим, если можно так выразиться).HttpContext.Current.User.Identity .: Идентичность вытаскивает мой локальный вход в Windows по сравнению с именем входа в систему. Я тестирую

site.master.cs код

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (HttpContext.Current.User.Identity.IsAuthenticated) 
    { 
     TopBox.Text = "Welcome " + HttpContext.Current.User.Identity.Name; 
     RegisterLabel.Visible = false; 
     Menu1.Visible = true; 
     Menu2.Visible = false; 
    } 
    else 
    { 
     TopBox.Text = "Welcome, Guest."; 
     RegisterLabel.Visible = true; 
     Menu1.Visible = false; 
     Menu2.Visible = true; 
    } 
} 

Site.Master код

<script type="text/javascript"> 
    var t; 
    window.onload = resetTimer; 
    document.onmousemove = resetTimer; 
    document.onkeypress = resetTimer; 

    function logout() { 

     try { 
      document.execCommand("ClearAuthenticationCache"); 
      window.location.href = window.location.protocol.replace(/\:/g, '') + "://" + window.location.host + "Account/Login.aspx"; 
     } 
     catch (e) { } 

    } 

    function resetTimer() { 
     window.clearTimeout(t); 
     t = window.setTimeout(logout, 900000); 
    } 
</script> 

<% - Рамочные скрипты -%> <% - скрипты сайта -%> <% ----%>

 </Scripts> 

    </asp:ScriptManager> 


    <header> 
     <div class="content-wrapper"> 
      <p style="float: left"> 
       <br /> 
      </p> 
      <br /> 
      <asp:Label ID="RegisterLabel" runat="server" Text="Register"> 
          <a style="font-size:small; color:white; align-content:center" href="Account/Register.aspx" > 
           Not Registered? Sign Up 
          </a> 
      </asp:Label> 
      <br /> 
      <div> 
       <p> 
        <a class="MasterMenu" style="color: #A90000; font-size: larger" runat="server" href="~/">Following High School Football</a> 
       </p> 

       <p> 
        <asp:Label ID="TopBox" Font-Size="Small" Text="" runat="server" TextMode="SingleLine"></asp:Label> 
       </p> 

       <asp:Menu ID="Menu2" class="dropmenu" runat="server" Style="margin-left: 25%; margin-right: 25%; font-size: 12px;" 
        BackColor="Transparent" 
        StaticDisplayLevels="2" StaticHoverStyle-BackColor="ForestGreen" StaticMenuItemStyle-HorizontalPadding="1px" 
        StaticMenuItemStyle-ItemSpacing="1px" StaticMenuItemStyle-Width="100%" Font-Size="Large" 
        StaticMenuItemStyle-BackColor="DarkGreen" StaticMenuItemStyle-Height="40px"> 
        <Items> 
         <asp:MenuItem NavigateUrl="Account/Login.aspx" Text="Login" Value="Login"></asp:MenuItem> 
         <asp:MenuItem NavigateUrl="Account/Register.aspx" Text="Register" Value="Register"></asp:MenuItem> 
         <asp:MenuItem NavigateUrl="Account/Recovery.aspx" Text="Password" Value="Recovery"></asp:MenuItem> 
        </Items> 

       </asp:Menu> 

       <asp:Menu ID="Menu1" class="dropmenu" runat="server" Style="margin-left: 25%; margin-right: 25%; font-size: 12px;" 
        BackColor="Transparent" 
        StaticDisplayLevels="2" StaticHoverStyle-BackColor="ForestGreen" StaticMenuItemStyle-HorizontalPadding="1px" 
        StaticMenuItemStyle-ItemSpacing="1px" StaticMenuItemStyle-Width="100%" Font-Size="Large" 
        StaticMenuItemStyle-BackColor="DarkGreen" StaticMenuItemStyle-Height="40px"> 
        <Items> 
         <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home" Value="Home"></asp:MenuItem> 
         <asp:MenuItem NavigateUrl="~/Records.aspx" Text="Records" Value="Records"></asp:MenuItem> 
         <asp:MenuItem NavigateUrl="~/Pickem.aspx" Text="Pick Em" Value="Pick Em"></asp:MenuItem> 
         <asp:MenuItem NavigateUrl="#" Text="Favorites" Value="Favorites"></asp:MenuItem> 
         <asp:MenuItem NavigateUrl="Account/Logoff.aspx" Text="Logoff" Value="Logoff"></asp:MenuItem> 
        </Items> 

       </asp:Menu> 

      </div> 
     </div> 

    </header> 

    <div id="body"> 
     <asp:ContentPlaceHolder runat="server" ID="FeaturedContent" /> 
     <section class="content-wrapper main-content clear-fix"> 
      <asp:ContentPlaceHolder runat="server" ID="MainContent" /> 
     </section> 
    </div> 

    <footer style="position: absolute; bottom: -240px; width: 98%; left: 136px; height: 63px;"> 
     <div class="content-wrapper"> 
      <div class="float-right"> 
       <br /> 
       <br /> 
       <p>&copy; <%: DateTime.Now.Year %> - FHSF </p> 
      </div> 
     </div> 
    </footer> 
</form> 

web.config

 <system.web> 

    <compilation debug="true"> 
     <assemblies> 
     <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 
     <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 
     <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/> 
     <add assembly="System.Web.Extensions.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 
     <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 
     </assemblies> 
    </compilation> 

    <httpRuntime targetFramework="4.5"/> 
    <pages> 
     <namespaces> 
     <add namespace="System.Web.Optimization"/> 
     </namespaces> 
     <controls> 
     <add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt"/> 
     </controls> 
    </pages> 

    <anonymousIdentification enabled="true"></anonymousIdentification> 
    <profile defaultProvider="DefaultProfileProvider" enabled="true"> 
     <providers> 
     <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="SqlServicesConnection" applicationName="/"/> 
     </providers> 
     <properties> 
      <add name="UserDetailID" type="int" /> 
     </properties> 
    </profile> 

    <membership defaultProvider="DefaultMembershipProvider"> 
     <providers> 
     <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="SqlServicesConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"/> 
     </providers> 
    </membership> 
    <roleManager defaultProvider="DefaultRoleProvider"> 
     <providers> 
     <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="SqlServicesConnection" applicationName="/"/> 
     </providers> 
    </roleManager> 
    <sessionState mode="InProc" customProvider="DefaultSessionProvider"> 
     <providers> 
     <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="SqlServicesConnection"/> 
     </providers> 
    </sessionState> 
    </system.web> 

    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v12.0"/> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/> 
     <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0"/> 
     </dependentAssembly> 
     <dependantAssembly> 
     <assemblyIdentity name='EntityFramework' culture="neutral" PublicKeyToken="b77a5c561934e089" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.4.0.0" newVersion="4.4.0.0"/> 
     </dependantAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

РЕЗУЛЬТАТ: Моя учетная запись Windows отображается как аутентифицированный пользователь, если это не мое намерение. Я хочу иметь возможность определять только проверенных пользователей в приложении. Как мне это достичь?

+1

Скорее всего, вы используете Windows auth для сайта, а запросы результатов автоматически аутентифицируются. [edit], чтобы показать соответствующую часть файла web.config, чтобы помочь кому-то ответить на ваш вопрос. –

+0

Добавлен код web.config по предложению Алексея. – MDDeVane

+0

Хотел бы дать Гостю возможность перейти на страницу Default.aspx и Login. ASPX. Я мог бы добиться этого, скрывая меню, которое обращается к другим веб-страницам, но это не помешает им вводить в субдомен в URL-адресе. – MDDeVane

ответ

0

Типичный веб ASP.NET формы схема аутентификации будет работать следующим образом:

  1. После того, как пользователь успешно подписывает на, веб-сайт устанавливает куки, представляющий аутентификацией пользователя или сеанс. ASP.NET предлагает forms authentication ticket and cookie, или вы можете катить самостоятельно.

  2. запроса HTTP Каждый перехватывается (через Authenticate случае) с помощью HttpModule для разбора/расшифровать куки и установить HttpContext.User на объект, который представляет текущего пользователя. Как вы обнаружили, это не происходит само по себе. Вы можете свернуть свой собственный модуль или использовать Microsoft's

  3. Тогда и только тогда ваше приложение может использовать свойство HttpContext.User для определения личности текущего пользователя. Если вы пропустите шаги 1 & 2, свойство HttpContext.User вернет идентификатор пользователя, назначенного контексту выполнения App Pool, который в этом случае вы, вероятно, потому, что вы используете сайт локально.

Для этого используется cookbook со встроенной аутентификацией форм ASP.NET. Вы также должны иметь возможность создавать веб-сайт, который использует проверку подлинности с помощью мастера создания проекта.

+0

Я обнаружил, что я, бессознательно, пытался использовать членство и идентификацию с точки зрения безопасности. Я обнаружил, что есть различия, о которых говорится в этой статье. https://brockallen.com/2012/09/02/think-twice-about-using-membershipprovider-and-simplemembership/ Короче говоря, я не считаю, что мне нужен метод форм, поскольку членство, вероятно, все, что должно быть необходимо , – MDDeVane

 Смежные вопросы

  • Нет связанных вопросов^_^