これは以前にも何度も質問されてきたことを知っていますが、残念ながらASP.NET Core Webアプリではなく、古典的なASP.NET Webアプリについてです。 ASP.NET CoreアプリのIIS構成は従来のASP.NETとは大きく異なります。たとえば、ASP.NET CoreはKestrelプロキシを使用しているため、ASP.NETに関連する構成の多くはASP.NET Coreにはありません。 IISのアプリでの匿名認証とWindows認証の両方。これで終わりですが、それ以上に機能すると思います。
単一のasp.netコアWebアプリでこれらの両方の認証を有効にする手順は何ですか?
IISはリバースプロキシとして機能し、ユーザーのWindows IDを設定し、Kestrelに送信します。そのため、最初にIISを設定して、Windows認証と匿名認証の両方を許可します。
次に、web.configを変更して、IISにWindows IDが(見つかった場合)をそのようなASP.NET Coreアプリケーションに送信するように変更する必要があります。 https: //stackoverflow.com/a/42163175/682724
この時点で、「[Authorize]」属性を使用してコントローラーアクションを作成すると、HttpContext.User.Identity.Name;
には、クライアントが使用するWindows IDの値が必要です。私はここに似たものに答えました: ASP.NET Coreの特定のルートでのNTLM認証
良い点は、クライアントがWindows IDトークンを渡さない場合でも、標準のコントローラーアクションが機能する一方で、保護された([Authorize]タグを使用する)トークンは失敗することです。
PS:私はcurl.exeを冗長モードで使用して、承認プロトコル(ネゴシエートプロトコル、NTLMトークン...)
ASP.NET Core 2.0アプリケーションについても同様のシナリオがあり(単一のコントローラーを除き、アプリ全体でWindows認証を使用します)、Daboulの説明では不十分でした。
anonymousが優先されるので 、 here のようにカスタムミドルウェアを設定する必要がありました。
public class NtlmAndAnonymousSetupMiddleware
{
private readonly RequestDelegate next;
public NtlmAndAnonymousSetupMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task Invoke(HttpContext context)
{
if (context.User.Identity.IsAuthenticated || context.Request.Path.ToString().StartsWith("/Anonymous"))
{
await next(context);
return;
}
await context.ChallengeAsync("Windows");
}
}
startup.csでの使用:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseMiddleware<NtlmAndAnonymousSetupMiddleware>();
// other code here
}
そのため、ミドルウェアはAnonymousControllerの匿名要求のみを受け入れ、Windows認証情報が提供されない場合はチャレンジを提供します。
ミドルウェアは匿名で認証を必要とするものを区別するため、これは通常のコントローラーのように見えます。
[Route("Anonymous")]
public class AnonymousController : Controller
{
[HttpGet("Echo")]
public string Echo(string data)
{
return data;
}
}
(すべてWindowsマシンで実行)
Chrome +非匿名コントローラーアクションにアクセス=>正常に動作(両方とも@User.Identity.Name
および@Context.User.Identity.Name
正しいユーザーを返す
Chrome +匿名アクション=>直接動作
Firefox(OSからNTLMチケットを直接転送しない)+非匿名=>モーダルはuser/passを要求します=>正しく提供されていれば正常に動作します
Firefox +匿名アクション=>直接動作