Asp.Net Coreは、Windows認証が有効であり、IIS ExpressまたはIISで実行されている場合、_context?.User?.Identity?.Name
_の呼び出しからユーザーを認識しないようです。
望ましい動作:IISおよび/またはIIS Express)でWindows認証と匿名認証の両方を有効にすると、Asp.Net CoreはWindowsユーザーを自動的に認識します。
実際の動作:IISまたはIIS Express)でウィンドウと匿名認証の両方を有効にすると、ユーザー名がnullになります。匿名認証を無効にするかHttpContext.ChallengeAsync(IISDefaults.AuthenticationScheme)
、不要なログインプロンプトが表示されます。
私の理解では、これをActive Directoryに使用したい場合でも、Windowsユーザーを認証するためにActive Directoryやドメインは必要ありません。
環境:
依存関係:
起動:
_public void ConfigureServices(IServiceCollection services)
{
services.Configure<IISOptions>(iis =>
{
iis.AuthenticationDisplayName = "Windows";
iis.AutomaticAuthentication = true;
});
services.AddAuthentication(IISDefaults.AuthenticationScheme);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseAuthentication();
app.Run(async (context) =>
{
await context.Response.WriteAsync(JsonConvert.SerializeObject(new
{
UserName = context?.User?.Identity?.Name
}));
});
_
launchSettings.json:
_{
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:51682/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
_
web.config:
_<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<remove name="aspNetCore" />
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore forwardWindowsAuthToken="true" processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
_
applicationhost.config:(IIS Express)
_<authentication>
<anonymousAuthentication enabled="true" userName="" />
<basicAuthentication enabled="false" />
<clientCertificateMappingAuthentication enabled="false" />
<digestAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="false"></iisClientCertificateMappingAuthentication>
<windowsAuthentication enabled="true">
<providers>
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
_
いくつかのこと:
匿名認証を無効にすると、ブラウザがサイトを信頼していない可能性が高いため、ポップアップが表示されます。 (Windowsコントロールパネルから)[インターネットオプション]を開く必要があります-> [セキュリティ]タブ-> [信頼済みサイト]をクリックし、[サイト]をクリックして、サイトのURLを追加します。 IEとChromeの両方を使用して、認証情報を自動的に送信するかどうかを決定します。
匿名の両方が有効でWindows認証が有効になっている場合、ユーザーがログインする必要があることを伝える場所を除いて、匿名が優先されます。これを行うには、使用 [Authorize]
属性は、コントローラー、または個別のアクションのみのいずれかです。
詳細は、ここの「匿名アクセスを許可する」の下にあります: https://docs.Microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-2.0&tabs=aspnetcore2x# allow-anonymous-access