我在Web应用程序上设置了身份验证表单,但仍然可以访问所有其他页面。在身份验证之前,如何防止自己访问页面?
我创建了一个界面,以便可以使用登录方法,该方法将使用用户名和密码,如果绑定成功,则返回true或false。
界面
using System;
using HSLogApp.Classes;
namespace HSLogApp.Interfaces
{
public interface IAuthService
{
bool Login(string username, string password);
}
}
我创建了一个继承接口的类。在构造函数中进行连接,并使用Login方法接收用户名和密码。
身份验证类
using System;
using System.Linq;
using HSLogApp.Interfaces;
using Microsoft.Extensions.Options;
using Novell.Directory.Ldap;
namespace HSLogApp.Classes
{
class LdapAuthenticationService : IAuthService
{
private const string MemberOfAttribute = "memberOf";
private const string DisplayNameAttribute = "displayName";
private const string SAMAccountNameAttribute = "sAMAccountName";
private readonly LdapConfig _config;
private readonly LdapConnection connection;
public LdapAuthenticationService(IOptions<LdapConfig> config)
{
_config = config.Value;
connection = new LdapConnection
{
SecureSocketLayer = true
};
try
{
connection.Connect(_config.Url, _config.Port);
// _connection.Bind(username, password);
}
catch (LdapException lex)
{
Console.WriteLine("CONNECTION ERROR");
Console.WriteLine("DETAILS - " + lex.ToString());
}
}
public bool Login(string Username, string Password)
{
try
{
connection.Bind(Username, Password);
}
catch
{
return false;
}
return true;
}
}
}
编辑 查看:
@page
@model IndexModel
@{
ViewData["Title"] = "Login";
}
<div class="box-header">
<h2>Log In</h2>
</div>
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<label for="username">Username</label>
<br />
<input type="email" id="Username" asp-for="Username" class="form-control">
<br />
<label for="password">Password</label>
<br />
<input type="password" id="Password" asp-for="Password" class="form-control">
<br />
<button type="submit">Sign In</button>
<br />
</form>
<a href="#"><p class="small">Forgot your password?</p></a>
<br>
@if(User.Identity.IsAuthenticated)
{
<p class="alert alert-success">
You are successfully authenticated.
</p>
}
查看背后的代码 显示我如何检查身份验证。
public async Task<ActionResult> OnPostAsync(string returnUrl = null)
{
bool user = _authService.Login(Username, Password);
if (user)
{
Result = true;
var claims = new List<Claim>
{
new Claim(ClaimTypes.NameIdentifier, Username)
};
var claimsIdentity = new ClaimsIdentity(
claims, CookieAuthenticationDefaults.AuthenticationScheme);
var authProperties = new AuthenticationProperties { IsPersistent = true };
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
authProperties);
return RedirectToPage("/hslogs/index");
}
else
{
Result = false;
return RedirectToPage();
}
}
我希望这就是您所需要的。让我知道是否需要发布更多代码/信息来让您了解我的情况。
答案 0 :(得分:0)
我在[Authorize]
上方命名空间下方的控制器顶部添加了public class IndexModel: PageModel
。
它看起来像这样:
[Authorize]
public class IndexModel: PageModel
{
...
{