カスタムのユーザークラスがMyPrincipal
で、いくつかのカスタムプロパティがあります。これは、認証されたClaimsPrincipal
の代わりに使用します。 HttpContext.User
認証後にASP.NETコアのHttpContext.Userを置き換えるにはどうすればよいですか?
私はカスタムミドルウェアを追加しました:
public class MyMiddleware {
private readonly RequestDelegate next;
public MyMiddleware(RequestDelegate next) {
this.next = next;
}
public async Task Invoke(HttpContext context) {
if (context.User.IsAuthenticated) {
context.User = new MyPrincipal(context.User);
}
await next(context);
}
}
は私が認証後に実行するミドルウェアを登録しているが、MVCの前Startup.cs
に:私の_Layout.cshtml
で
public void Configure(IApplicationBuilder app) {
app.UseAuthentication();
app.UseMiddleware<MyMiddleware()>;
app.UseMvcWithDefaultRoute();
}
私が使用したいです〜からのカスタムプロパティMyPrincipal
:
...
@if (User is MyPrincipal) {
<do stuff>
}
...
これまでのところ、ユーザーはMyPrincipal
と認識されています。
しかし、私はグローバルな認証ポリシーを追加する場合:
public void ConfigureServices(IServiceCollection services) {
services.AddMvc(options => {
var policy = new AuthorizationPolicyBuilder(CookieAuthenticationDefaults.AuthenticationScheme)
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
});
}
を突然、_Layout
でUser
がちょうどClaimsPrincipal
です。
認証ポリシーの完了後、MVCが私のプリンシパルの置き換えをやめたり、パイプラインにフックするのを止めるにはどうしたらいいですか?
P.私はASP.NET Core 2.0プレビュー2を使用しています。
ユーザオブジェクトを上書きするミドルウェアパイプラインの後に何かがありますか? – DavidG
@DavidG唯一の他のミドルウェアはMVCです。私の最高の推測は、PolicyEvaluatorで起こります:https://github.com/aspnet/Security/blob/dev/src/Microsoft.AspNetCore.Authorization.Policy/PolicyEvaluator.cs#L33 –