興味のある人は、カスタムClaimsTransformerにEF DBContextを挿入してカスタムロール要求を追加する方法の簡単な例を示します。
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IClaimsTransformer, MyClaimsTransformer>();
services.AddMvc();
services.AddDbContext<MyDbContext>(options => options.UseSqlServer(
Configuration.GetConnectionString("MyConnStringSetting")
));
(...)
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseClaimsTransformation(context =>
{
var transformer = context.Context.RequestServices.GetRequiredService<IClaimsTransformer>();
return transformer.TransformAsync(context);
});
(...)
}
MyClaimsTransformer.cs
public class MyClaimsTransformer : IClaimsTransformer
{
private readonly MyDbContext _context;
public MyClaimsTransformer(MyDbContext context)
{
_context = context;
}
public Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext context)
{
var identity = (ClaimsIdentity)context.Principal.Identity;
var userName = identity.Name;
var roles = _context.Role.Where(r => r.UserRole.Any(u => u.User.Username == userName)).Select(r => r.Name);
foreach (var role in roles)
{
var claim = new Claim(ClaimTypes.Role, role);
identity.AddClaim(claim);
}
return Task.FromResult(context.Principal);
}
}
あなたが使用してステートメントを含むコードを表示することができます。今のところ、 'System.DirectoryServices'は参照していません。あなたがこれを行うと、比較的簡単に広告情報を得ることができます –
@SimonPrice私は申し訳ありませんが表示されるコードはありません、それは動作しなかったので、私はすべての試みを廃止しました。しかし、Windows認証を有効にしたばかりの新しいプロジェクトだと思いますが、そこからは悲惨で苦しんでいるだけです。私は間違いなく 'System.DirectoryServices'を探し、ADとは何ですか? –
ADはActive Directoryです。あなたが達成しようとしているプロジェクトのアイデアは何ですか? –