1

ASP.NET MVC4 アプリケーション プロジェクトがあります。を作成して、プロジェクトに WebApi も追加しましたApiContoller。MVC のフォーム認証と Web API の基本認証 (Thinktecture) があります。

ApiContoller では[Authorize]うまく機能していることに気付きましたが、[Authorize(Roles="")]メソッドを呼び出すことはできません。Contollerその理由は、MVCの子孫ではステートメントUser.IsInRole("");Roles.IsUserInRole(User.Identity.Name, "");戻り値の両方が返されるためだと思いますtrueが、ApiContoller子孫では最初のステートメントは常に 、ユーザーが役割を持っている場合falseに 2 番目の戻り値は次のとおりです。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メソッドでは、 (Thinktecture) および MVC で認証してclient.DefaultRequestHeaders.Authorization = new BasicAuthenticationHeaderValue(login, password);FormsAuthenticationますContoller

WebApi の認証は関数で設定さWebApiConfig.csRegister(HttpConfiguration config)ます。

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

Q: ASP.NET Web API でロールを使用して属性を承認する方法

4

0 に答える 0