2016-11-28 5 views
1

WebAPIプロジェクトでは、ユーザーに対してWindows認証を使用する必要がありますが、ルート上のAuthorize属性に対してカスタムロールプロバイダを実装する必要があります。しかし、私はそれを実装するとき、私はいつも{"メッセージ": "この要求に対して承認が拒否されました"}という結果になりました。さらに、私のブレークポイントのどれもこれまでのカスタムロールプロバイダWeb APIでWindows認証を使用するカスタムRoleProvider

コントローラ

[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); 
    } 

のWebコンフィグ

<authentication mode="Windows"/> 
    <roleManager cacheRolesInCookie="false" 
     defaultProvider="CustomRoleProvider" 
     enabled="true"> 
<providers> 
    <clear /> 
    <add name="CustomRoleProvider" 
     type="Data.CustomRoleProvider, Data" /> 
</providers> 

のコンストラクタの1を除いてトリガしません

パズルのどの部分が欠落していますか?私は現在のユーザーにリクエストを行い、データベースに適切な役割があるかどうかを確認する必要があります。

おかげデフォルトで

答えて

3

、Visual Studioは無効にプロジェクトにWindows認証プロパティを設定します。プロパティペイン(タブではない)でプロパティを有効にする必要があります。それはあなたのRoleProviderのブレークポイントに当たるはずです。

Setting Windows Authentication Property in Visual Studio

サーバー上のアプリケーションを置くとき、あなたは、Windows認証と無効に匿名認証を有効にするIISで同様のプロセスを実行する必要があります。

関連する問題