gpt4 book ai didi

c# - 在 Web API 中使用 Windows 身份验证的自定义 RoleProvider

转载 作者:太空宇宙 更新时间:2023-11-03 21:06:31 24 4
gpt4 key购买 nike

我有一个 WebAPI 项目,我需要在其中对用户使用 Windows 身份验证,但要为路由上方的授权属性实现自定义角色提供程序。然而,当我实现它时,我总是得到 {"Message":"Authorization has been denied for this request."} 作为我的调用结果。此外,除了自定义角色提供程序的构造函数中的断点之外,我的断点都不会触发

Controller

[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 Pane (不是选项卡)中,您需要将属性翻转为 Enabled。这应该可以让您在 RoleProvider 上设置断点。

Setting Windows Authentication Property in Visual Studio

当您将应用程序放在服务器上时,您可能必须在 IIS 中执行类似的过程以启用 Windows 身份验证和禁用匿名身份验证。

关于c# - 在 Web API 中使用 Windows 身份验证的自定义 RoleProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40853406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com