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.cs
れRegister(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 でロールを使用して属性を承認する方法