我有一個MVC4 Web應用程序設置,它使用Forms身份驗證和Web API進行交互。所有API控制器都使用[Authorize]
屬性。帶有窗體身份驗證和角色的Web API
直到我們開始添加角色支持時,它纔開始工作。相反,實施全面RoleProvider的,我加角色列表售票的UserData
,並創建了以下模塊:
public class SecurityModule : IHttpModule
{
public void Init(HttpApplication context)
{
var roleManager = (RoleManagerModule)context.Modules["RoleManager"];
roleManager.GetRoles += GetRoles;
}
void GetRoles(object sender, RoleManagerEventArgs e)
{
var user = e.Context.User;
if (user.Identity.IsAuthenticated && !(user is MyCustomPrincipal))
{
var roles = GetRolesFromFormsAuthCookie();
if (roles != null)
e.Context.User = new MyCustomPrincipal(user.Identity, roles,
otherData);
}
e.RolesPopulated = true;
}
}
這完美的作品對MVC電話。但是,對於API,即使GetRoles
被稱爲,但當它達到相應的方法時,它將回到GenericPrincipal
。
我該如何使用Web API進行此項工作?我是否必須創建DelegatingHandler
?
我還在我的Principal中存儲了一些自定義數據,這可能是不依賴於RoleProvider的原因(因爲我最終得到了RolePrincipal),儘管我可以將它存儲在請求上下文中。
更新:我現在已經添加了一個DelegatingHandler
,做同樣的IHttpModule
並設置Thread.CurrentPrincipal
。這是一個合理的方法嗎?
Québoludo que soy :-) –