usuário de autenticação no código: ASP.NET
-
10-07-2019 - |
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?
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.