私はこのアプローチをasp core 1.1を使用するソリューションで使用しました。まず、カスタムスキームを定義します。
public static class Authentication
{
public const string Scheme = "Custom";
}
あなたはその後、AuthenticationHandler<TOptions>
を継承しなければなりません。ヘッダ値を検証するためのロジックが行くのはここです:
public class MyAuthenticationHandler : AuthenticationHandler<MyOptions>
{
protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
var authorizationHeader = Context.Request.Headers["Authorization"];
if (!authorizationHeader.Any())
return Task.FromResult(AuthenticateResult.Skip());
var value = authorizationHeader.ToString();
if (string.IsNullOrWhiteSpace(value))
return Task.FromResult(AuthenticateResult.Skip());
// place logic here to validate the header value (decrypt, call db etc)
var claims = new[]
{
new Claim(System.Security.Claims.ClaimTypes.Name, "Bob")
};
// create a new claims identity and return an AuthenticationTicket
// with the correct scheme
var claimsIdentity = new ClaimsIdentity(claims, Authentication.Scheme);
var ticket = new AuthenticationTicket(new ClaimsPrincipal(claimsIdentity), new AuthenticationProperties(), Authentication.Scheme);
return Task.FromResult(AuthenticateResult.Success(ticket));
}
}
AuthenticationHandler
を継承するためには、あなたが使用しているスキームにAuthenticationScheme
-propertyを設定するオプションクラスを作成する必要があります。
public class MyOptions : AuthenticationOptions
{
AuthenticationScheme = Authentication.Scheme;
}
を
これ以降、継承する必要がありますAuthenticationMiddleware<TOptions>
。簡単にあなたがこれらの拡張メソッドを定義することができ、あなたのミドルウェアをプラグインするためには
public class MyAuthenticationMiddleware : AuthenticationMiddleware<MyOptions>
{
public MyAuthenticationMiddleware(RequestDelegate next, IOptions<MyOptions> options, ILoggerFactory loggerFactory, UrlEncoder encoder) : base(next, options, loggerFactory, encoder)
{
}
protected override AuthenticationHandler<MyOptions> CreateHandler()
{
return new MyAuthenticationHandler();
}
}
:これは、前の手順で実装ハンドラを作成します
public static IApplicationBuilder UseMyAuthentication(this IApplicationBuilder app, IConfigurationSection config)
{
return app.UseMyAuthentication(options => {});
}
private static IApplicationBuilder UseMyAuthentication(this IApplicationBuilder app, Action<MyOptions> configure)
{
var options = new MyOptions();
configure?.Invoke(options);
return app.UseMiddleware<MyAuthenticationMiddleware>(new OptionsWrapper<MyOptions>(options));
}
次に、あなたのStartup
クラスであなたが最終的に追加することができますあなたのミドルウェア:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMyAuthentication(Configuration.GetSection("MyAuthenticationOptions"));
// other stuff
app.UseMvc();
}
次に、作成したばかりのスキームを指定して、あなたの行動にAuthorizeAttribute
を追加します。
[Authorize(ActiveAuthenticationSchemes = Authentication.Scheme)]
public IActionResult Get()
{
// stuff ...
}
多くの手順がありますが、うまくいけばこれはあなたに行くでしょう!
どのaspコアのバージョンを使用していますか? – peco
.net core 1.1は私のターゲットフレームワークです – blue