我有一个数据库,它有一个用户表,访问表和一个将用户分配给多个访问权限的连接表。该站点将通过将AD中的身份用户名与Users表中的用户名进行匹配来验证用户,以验证他们是否可以看到该站点(Intranet)。访问表用于指定允许访问的页面。
在ASP Core 2中,如何使用Authorization在Startup上执行相同的检查以验证它们是否在Users表中,然后更进一步并使用Roles允许用户访问特定的Web页面。
我已经浏览了文档,但我无法弄清楚要走哪条路,因为这些示例使用的登录在我使用AD的情况下是不必要的。
我有一个用户表,并且不使用AD角色,因为我们有一个管理员进行交换,而我无权访问。
提前致谢
答案 0 :(得分:2)
授权属性是您正在寻找的。例如,
[Authorize(Roles = "Admin, User")]
如果您使用OAuth进行身份验证,则会在进行身份验证时创建一个ClaimsIdentity。根据声明,Authorize属性将开箱即用。例如,
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();
ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager,
OAuthDefaults.AuthenticationType);
AuthenticationProperties properties = CreateProperties(user.UserName);
AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);
context.Request.Context.Authentication.SignIn(oAuthIdentity);
}
您可以参考this post,其中我更详细地解释了类似的情况。