我在新发布的书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