Asp.net Core Webapi
プロジェクトの場合、Windows Authentication
のクレームとして役割を割り当てようとしています。以下は、ロールの主張の現在のアイデンティティを追加して私の変換です。窓口にクレームを追加する
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]
が使用されている場合は正常に動作しています。不足していますか?
ClaimsIdentityに新しい請求を追加した場合、あなたならば、http://stackoverflow.com/a/39032988/5426333 –
を見てみましょうIPrincipal.IsInRole(およびAuthorizeAttribute(Roles =))を使用するには、ClaimTypes.RoleではなくClaimTypes.GroupSidのクレームタイプを追加する必要があります。奇妙ですが真実。 – Rob
と追加しようとすると思います'ClaimTypes.GroupSid'として" admin "としてあなたは' System.ComponentModel.Win32Exception:プライマリドメインと信頼されたドメイン間の信頼関係が失敗しました ' –