在 Web API 中使用 Windows 身份验证的自定义 RoleProvider
Custom RoleProvider with Windows Authentication in Web API
我有一个 WebAPI 项目,我需要在其中对用户使用 Windows 身份验证,但要为路由上方的授权属性实施自定义角色提供程序。然而,当我实现它时,我总是得到 {"Message":"Authorization has been denied for this request."} 作为我的调用结果。此外 none 我的断点除了自定义角色提供者的构造函数中的断点
控制器
[Authorize(Roles="Administrator")]
[RoutePrefix("api/Constituents")]
public class ConstituentsController : ApiController
{
[Route("Constituents")]
[HttpGet]
public IDataResponse<List<IConstituent>> GetConstituents()
{
return service.GetConstituent();
}
自定义角色提供商
public class CustomRoleProvider : RoleProvider
{
public CustomRoleProvider()
{
this.UserRepo = new UserRepository(); //Breakpoint here triggers
this.RoleRepo = new RoleRepository();
}
public override string[] GetRolesForUser(string username)
{
var roles = UserRepo.GetUser(username)?.Roles?.Select(r => r.Name).ToArray();
return roles;
}
public override bool IsUserInRole(string username, string roleName)
{
var user = UserRepo.GetUser(username);
return user.Roles.Select(r => r.Name).Contains(roleName);
}
网络配置
<authentication mode="Windows"/>
<roleManager cacheRolesInCookie="false"
defaultProvider="CustomRoleProvider"
enabled="true">
<providers>
<clear />
<add name="CustomRoleProvider"
type="Data.CustomRoleProvider, Data" />
</providers>
我错过了什么拼图?我需要让当前用户发出请求,然后检查他们是否在数据库中具有适当的角色。
谢谢
默认情况下,Visual Studio 将项目的 Windows 身份验证 属性 设置为禁用。在 Properties 窗格(不是选项卡)中,您需要将 属性 翻转为 Enabled。那应该可以让您在 RoleProvider 上设置断点。
当您将应用程序放在服务器上时,您可能必须在 IIS 中执行类似的过程以启用 Windows 身份验证和禁用匿名身份验证。
我有一个 WebAPI 项目,我需要在其中对用户使用 Windows 身份验证,但要为路由上方的授权属性实施自定义角色提供程序。然而,当我实现它时,我总是得到 {"Message":"Authorization has been denied for this request."} 作为我的调用结果。此外 none 我的断点除了自定义角色提供者的构造函数中的断点
控制器
[Authorize(Roles="Administrator")]
[RoutePrefix("api/Constituents")]
public class ConstituentsController : ApiController
{
[Route("Constituents")]
[HttpGet]
public IDataResponse<List<IConstituent>> GetConstituents()
{
return service.GetConstituent();
}
自定义角色提供商
public class CustomRoleProvider : RoleProvider
{
public CustomRoleProvider()
{
this.UserRepo = new UserRepository(); //Breakpoint here triggers
this.RoleRepo = new RoleRepository();
}
public override string[] GetRolesForUser(string username)
{
var roles = UserRepo.GetUser(username)?.Roles?.Select(r => r.Name).ToArray();
return roles;
}
public override bool IsUserInRole(string username, string roleName)
{
var user = UserRepo.GetUser(username);
return user.Roles.Select(r => r.Name).Contains(roleName);
}
网络配置
<authentication mode="Windows"/>
<roleManager cacheRolesInCookie="false"
defaultProvider="CustomRoleProvider"
enabled="true">
<providers>
<clear />
<add name="CustomRoleProvider"
type="Data.CustomRoleProvider, Data" />
</providers>
我错过了什么拼图?我需要让当前用户发出请求,然后检查他们是否在数据库中具有适当的角色。
谢谢
默认情况下,Visual Studio 将项目的 Windows 身份验证 属性 设置为禁用。在 Properties 窗格(不是选项卡)中,您需要将 属性 翻转为 Enabled。那应该可以让您在 RoleProvider 上设置断点。
当您将应用程序放在服务器上时,您可能必须在 IIS 中执行类似的过程以启用 Windows 身份验证和禁用匿名身份验证。