Pergunta

Eu estou brincando com autenticação e autorização para se preparar para alguma tarefa. Eu criei duas páginas: Login.aspx e Default.aspx. No arquivo de configuração eu tenho autenticação conjunto de formas e negado o acesso usuários não autenticados:

<authentication mode="Forms">
      <forms name="aaa" defaultUrl="~/Login.aspx" />
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>

Então eu escrevi um código simples para autenticar meu usuário em Login.aspx:

protected void Page_Load(object sender, EventArgs e)
        {
            GenericIdentity identity = new GenericIdentity("aga", "bbb");
            Context.User = new GenericPrincipal(identity, new String[] { "User" }); ;
            Response.Redirect("~/Default.aspx");
        }

Quando eu executá-lo, o redirecionamento não ocorre. Em vez Login.aspx é chamado mais e mais porque o usuário não foi autenticado (Context.User.Identity.IsAuthenticated é falso em cada carga). O que estou fazendo de errado?

Foi útil?

Solução

Context.User define apenas o principal para a solicitação atual. Uma vez que o redirecionamento ocorre, as extremidades solicitação atual e um novo começa com o principal não substituído novamente (que aparentemente não é autenticado). Assim, a criação Context.User faz nada na verdade não autenticação.

Usando FormsAuthentication.SetAuthCookie () irá definir o cookie do usuário para um valor válido aceito pelo provedor de FormsAuthentication, ou colocar o token no URL. Você pode redirecionar para o conteúdo do seu coração, porque o cookie obviamente varas com o usuário para futuras solicitações.

De MSDN (em nosso):

Com a autenticação de formulários, você pode usar o método SetAuthCookie quando você quer autenticar um usuário , mas ainda mantêm o controle da navegação com redirecionamentos .

Como foi dito, este não requer necessariamente cookies - o nome é um pouco enganador, porque ele continuará a funcionar através da URL se FormsAuthentication está no modo cookieless:

O método SetAuthCookie adiciona um ticket de autenticação de formulários, quer a coleção cookies, ou para o URL se CookiesSupported é falsa.

Outras dicas

Você precisa realmente definir o usuário como autenticado. Todos os seguintes métodos vai funcionar e que você realmente ficar longe de sua tela de login.

FormsAuthentication.Authenticate()
FormsAuthentication.RedirectFromLoginPage()
FormsAuthentication.SetAuthCookie()

muitas maneiras de chegar ao mesmo resultado.

Você precisa realmente fazer uma chamada para o provedor FormsAuthentication para definir o login.

FormsAuthentication.RedirectFromLoginPage (txtUser.Text, chkPersistLogin.Checked)

é um exemplo simples

Depois de criar o boneco Context.User, você precisa executar um método FormsAuthentication.SetAuthCookie ou RedirectFromLoginPage.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top