回答の更新: フレームワークに従ってコードを記述してください。サンプルのミドルウェアは、ASP.NET Core MVCには適していません。 - app.UseMiddleware<BasicAuthenticationMiddleware>();
Startup.csで
public class BasicAuthenticationHandler : AuthenticationHandler<BasicAuthenticationOptions>
{
protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
var authHeader = (string)this.Request.Headers["Authorization"];
if (!string.IsNullOrEmpty(authHeader) && authHeader.StartsWith("basic", StringComparison.OrdinalIgnoreCase))
{
//Extract credentials
string encodedUsernamePassword = authHeader.Substring("Basic ".Length).Trim();
Encoding encoding = Encoding.GetEncoding("iso-8859-1");
string usernamePassword = encoding.GetString(Convert.FromBase64String(encodedUsernamePassword));
int seperatorIndex = usernamePassword.IndexOf(':');
var username = usernamePassword.Substring(0, seperatorIndex);
var password = usernamePassword.Substring(seperatorIndex + 1);
if (username == "test" && password == "test")
{
var user = new GenericPrincipal(new GenericIdentity("User"), null);
var ticket = new AuthenticationTicket(user, new AuthenticationProperties(), Options.AuthenticationScheme);
return Task.FromResult(AuthenticateResult.Success(ticket));
}
}
return Task.FromResult(AuthenticateResult.Fail("No valid user."));
}
}
public class BasicAuthenticationMiddleware : AuthenticationMiddleware<BasicAuthenticationOptions>
{
public BasicAuthenticationMiddleware(
RequestDelegate next,
IOptions<BasicAuthenticationOptions> options,
ILoggerFactory loggerFactory,
UrlEncoder encoder)
: base(next, options, loggerFactory, encoder)
{
}
protected override AuthenticationHandler<BasicAuthenticationOptions> CreateHandler()
{
return new BasicAuthenticationHandler();
}
}
public class BasicAuthenticationOptions : AuthenticationOptions
{
public BasicAuthenticationOptions()
{
AuthenticationScheme = "Basic";
AutomaticAuthenticate = true;
}
}
登録:ここに私の例です。
[Authorize(ActiveAuthenticationSchemes = "Basic")]
[Route("api/[controller]")]
public class ValuesController : Controller
、あなたはアプリケーションレベルでフィルタを認可適用した場合、属性AllowAnonymous
を使用します。このコードを使用すると、スタンダール属性Autorize
で任意のコントローラを制限することができます。
オリジナルの答え: From documentation
彼らが登録する前に、匿名ユーザーがサイトに関する情報を得ることができるホームコントローラに[AllowAnonymous]
を追加します。
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
namespace ContactManager.Controllers {
[AllowAnonymous]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
は、何にHomeControllerありません、私はMVCを使用していないんだけど、とは、Web APIと述べました。私の場合、基本認証はカスタムミドルウェアです(例:https://stackoverflow.com/questions/38977088/asp-net-core-web-api-authentication)。それでAllowAnonymous属性を気にしません。私は呼び出されたコントローラーの属性を読みたいと思います。 –
ASP.NetコアはMVCとWeb APIで同じです。 –
それは私のために働く!ありがとう!!! – Leila