1

我有 ASP.NET MVC4 应用程序项目。我还通过创建将 WebApi 添加到我的项目中ApiContoller。我有用于 MVC 的表单身份验证和用于 Web API 的基本身份验证(Thinktecture)。

我注意到在 ApiContoller[Authorize]中运行良好,但从[Authorize(Roles="")]不让调用方法。我认为原因是在 MVCContoller后代中 statementsUser.IsInRole("");Roles.IsUserInRole(User.Identity.Name, "");returns true,但在ApiContoller后代中,第一个语句总是 false,当第二个返回时,true如果用户具有角色:

bool booool1 = User.IsInRole("Radiolog");
bool booool2 = Roles.IsUserInRole(User.Identity.Name, "Radiolog");

这是我的 web.config 配置:

    <add key="enableSimpleMembership" value="false" />
    <add key="autoFormsAuthentication" value="false" />
    ...
        <roleManager cacheRolesInCookie="false" defaultProvider="CustomRoleProvider" enabled="true">
          <providers>
            <clear />
            <add name="CustomRoleProvider" type="RisSystem.Services.CustomRoleProvider" />
          </providers>
        </roleManager>
        ...
        <authentication mode="Forms">
          <forms loginUrl="~/Account/Login" timeout="2880" />
        </authentication>

ApiController我正在验证的方法中:client.DefaultRequestHeaders.Authorization = new BasicAuthenticationHeaderValue(login, password);(Thinktecture) 和FormsAuthenticationMVC Contoller

WebApi 的身份验证WebApiConfig.csRegister(HttpConfiguration config)函数中设置:

        var authConfig = new AuthenticationConfiguration();
        authConfig.AddBasicAuthentication((userName, password) => AuthenticationService.ValidateUser(userName, password));
        config.MessageHandlers.Add(new AuthenticationHandler(authConfig));

问:如何在 ASP.NET Web API 中使用角色授权属性

4

0 回答 0