Я пытаюсь назначить роли в качестве претензий для Windows Authentication
для проекта Asp.net Core Webapi
. Ниже мое преобразование, добавив текущую идентификацию роли.добавить претензии к идентификатору Windows
public class ClaimsTransformer : IClaimsTransformer
{
public Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext context)
{
//add new claim
var ci = (ClaimsIdentity) context.Principal.Identity;
var c = new Claim(ClaimTypes.Role, "admin");
ci.AddClaim(c);
return Task.FromResult(context.Principal);
}
}
И это промежуточное программное обеспечение добавляется к Startup.Configure:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(LogLevel.Debug);
loggerFactory.AddDebug();
app.UseClaimsTransformation(o => new ClaimsTransformer().TransformAsync(o));
app.UseStaticFiles();
app.UseMvc();
}
Однако роль admin
не разрешено в этом методе (403-Запрещено).
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET api/values/5
[HttpGet("{id}")]
[Authorize(Roles = "admin")]
public string Get(int id)
{
return "value";
}
}
Он работает нормально, если используется [Authorize]
. Любые недостающие?
Взгляните на http://stackoverflow.com/a/39032988/5426333 –
При добавлении новой претензии к ClaimsIdentity, если вы хотите, чтобы он работал с IPrincipal.IsInRole (и AuthorizeAttribute (Roles =), тогда вам нужно добавить его с типом претензии ClaimTypes.GroupSid, а не ClaimTypes.Role. Странно, но верно. – Rob
и я думаю, если вы попытаетесь добавить его как 'ClaimTypes.GroupSid' как« admin »вы получаете' System.ComponentModel.Win32Exception: доверительные отношения между основным доменом и доверенным доменом не сработали' –