ASP. NET Forms Auth - перенаправлять пользователей без полномочий на страницу? - PullRequest
0 голосов
/ 26 мая 2020

Я использую проверку подлинности с помощью форм с AD в качестве основного поставщика.

У меня две роли пользователя: член, администратор

В защищенной области у меня есть некоторые страницы, доступные только администратору.

web.config

<authentication mode="Forms">
  <forms loginUrl="login.aspx" defaultUrl="/backend/" name="ssckt" timeout="60" path="/" />
</authentication>
 <location path="backend">
    <system.web>
      <httpRuntime requestValidationMode="2.0" />
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>
 <location path="backend/Log.aspx">
<system.web>
  <authorization>
    <allow roles="admin"/>
    <deny users="*"/>
  </authorization>
</system.web>

Я пытаюсь разобраться, как отображать сообщение пользователю, если он пытается получить доступ область, в которой их роль не дает им доступа к ней.

Они могут получить к нему доступ, нажав на навигацию после входа в систему или если внешнее приложение перенаправит их туда. В последнем случае они перенаправляются на страницу входа в систему, они входят в систему, но перенаправляются обратно на нее без сообщения, информирующего их, что у них нет разрешения.

login.aspx

If AuthenticateUser(strLDAPconnection, txtUser.Text, txtPass.Text) = True Then
        Dim roles = "member"
        Dim ctx As PrincipalContext = New PrincipalContext(ContextType.Domain)
        Dim up As UserPrincipal = UserPrincipal.FindByIdentity(ctx, txtUser.Text)
        If up IsNot Nothing Then
            Dim authGroups = up.GetAuthorizationGroups().Where(Function(c) c.Name = "backend-admin").Count()
            If authGroups > 0 Then roles = "admin,member"
        End If
        Dim authTicket As New FormsAuthenticationTicket(1, txtUser.Text, DateTime.Now, DateTime.Now.AddMinutes(60), False, Roles)
        Dim encryptedTicket As String = FormsAuthentication.Encrypt(authTicket)
        Dim authCookie As New HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
        Response.Cookies.Add(authCookie)
        Response.Redirect(FormsAuthentication.GetRedirectUrl(txtUser.Text, False))
    Else
        lblMsg.Text = "Invalid Username or Password"
    End If

Могу ли я изменить страницу входа, чтобы узнать, перенаправляется ли пользователь обратно из-за неправильного назначения роли для доступа к конкретной странице?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...