0

我一直在使用基於角色的身份驗證在我的項目中遇到問題。MVC 5基於角色的mvc身份驗證5.1.0

我設置了一些角色並將它們鏈接到用戶。

這工作:

[Authorize]  
public class UsersController : Controller 
{} 

如果我沒有登錄,它要求我登錄。

但是如果我將其更改爲:

[Authorize(Roles = "ManageUsers")]  
public class UsersController : Controller 
{} 

我嘗試從與該角色它要求我登錄的用戶訪問它。

所以我做了一些goggling,我發現這個職位:Link,他們建議增加:

<roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider"> 
    <providers> 
    <clear /> 
    <add name="AspNetSqlRoleProvider" connectionStringName="DefaultConnection" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    </providers> 
</roleManager> 

在我的網絡配置。我做了什麼,然後它允許我訪問控制器。但是我注意到,如果我擔任這個角色,它可以讓我訪問控制器。

我正在爲我的項目使用Cookie身份驗證。所以我認爲我在不同類型的認證之間感到困惑。

public void ConfigureAuth(IAppBuilder app) 
    { 
     // Enable the application to use a cookie to store information for the signed in user 
     app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      ExpireTimeSpan = TimeSpan.FromMinutes(5), 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      LoginPath = new PathString("/Account/Login") 
     }); 

所以我需要在哪裏何去何從一些建議:

我只是想利用它由默認的項目實施的角色,我已填充數據庫等等。我只是不能讓我的過濾器工作。

回答

2

我認爲我對 認證的不同類型感到困惑。

我同意。首先,身份驗證與登錄有關。一旦用戶登錄,它們就會被認證。

基於用戶角色限制對控制器操作或其他資源的訪問權限稱爲授權。很多時候,人們將這兩個安全問題統稱爲驗證碼。然而,聽起來像你有認證實施,並有授權問題。

據我所知,web.config中的roleManager部分與Microsoft.AspNet.Identity不兼容,它看起來像您正在使用的那樣。如果您有一個UserManager<T>類正在某個地方設置,那麼您應該使用Microsoft.AspNet.Identity角色系統,而不是舊版角色管理器。因此,從web.config中刪除該部分。

聽起來像Microsoft.AspNet.Identity正在阻止基於角色的訪問您的操作,因爲那裏沒有正確設置。該庫有自己的類RoleManager,類似於UserManager,用於管理角色。您的問題中沒有提供足夠的信息供任何人幫助您確定問題的確切原因。但是,如果您對Microsoft.AspNet.Identity RoleManager進行了一些研究,那麼您應該可以自己調試問題。祝你好運。