我在新發布的書ASP.NET Web Api 2 Recipes中使用食譜10-3來支持Web API中的基本身份驗證。這個食譜使用Thinktecture的第三方庫。從下面的代碼可以看出,我使用用戶身份驗證自己的帳戶服務。ASP.NET Web API中基於角色的授權 - 如何在主體上設置角色?
using Thinktecture.IdentityModel.WebApi.Authentication.Handler;
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
...
var authenticationConfiguration = new AuthenticationConfiguration();
var accountService = ServiceLocator.Get<AccountService>();
authenticationConfiguration.AddBasicAuthentication((userName, password) => accountService.Authenticate(userName, password));
config.MessageHandlers.Add(new AuthenticationHandler(authenticationConfiguration));
...
}
}
現在,我想使基於角色的授權在使用授權屬性我控制器:
[Authorize(Roles="administrator")]
public IHttpActionResult Get()
{
...
}
我的帳戶服務顯然知道有關用戶及其分配的角色,但這些信息是不可用授權attibute(角色未在委託人身上設置)。
我該如何做到這一點? Thinktecture身份驗證處理程序可以配置爲在主體上設置角色嗎?或者我應該創建自己的自定義授權屬性(派生自Authorize屬性)?如果是這樣,我是否應該重寫OnAuthorization方法以使用我的帳戶服務創建和設置主體?或者直接重寫IsAuthorized方法?或者也許別的東西...
大聲笑。完全忘記了這一點。儘管如此,OWIN方法更受推薦。 – leastprivilege 2014-08-31 09:30:20
它可以幫助很大,但在我的Thinktecture中,AddBasicAuthentication()沒有重載(版本3.6.1.0)。你是什麼? – 2015-03-27 08:32:03
我的ThinkTecture AuthenticationHanlder版本來自NuGet軟件包版本1.1.0 ... – 2015-03-27 09:26:22