我想向已经过身份验证的Windows用户添加角色声明。我天真的第一种方法是在WebApi之前运行的自定义owin中间件中添加角色声明。像这样:
public class IdentityMiddleware : OwinMiddleware
{
public IdentityMiddleware(OwinMiddleware next) : base(next)
{
}
public async override Task Invoke(IOwinContext context)
{
var user = context.Request.User as WindowsPrincipal;
var identity = user.Identity as ClaimsIdentity;
identity.AddClaim(new Claim(ClaimTypes.Role, "Admin"));
await Next.Invoke(context);
}
}
但是在控制器中提供Authorize属性时,就像这样。
public class TestController : ApiController
{
[Authorize(Roles = "Admin")]
public string Get()
{
return User.Identity.Name;
}
}
..我会得到 401 。
我注意到新索赔的发行人是“地方当局”而不是“AD管理局”可能是这个原因吗?
答案 0 :(得分:1)
您是否尝试过这项授权属性:
[Authorize(ClaimTypes.Role, "Admin")]
答案 1 :(得分:1)
这对我有用:
char c[]={"H","E","L","L","O"};