😊

ASP.NET Core Web APIでWindows認証を有効にする

2023/04/01に公開

プロジェクトテンプレートから作れば有効化されるので、細かいことを気にしてなかったんですが、無効な状態から最低限有効化するのに必要な要素を整理したくなったので、まとめておきます。

Serverサイド

まずつぎのNuGetパッケージを追加します。

  • Microsoft.AspNetCore.Authentication.Negotiate

そして起動コード、Program.csでWindows認証と認可サービスを追加し、未認証時(未認可?)のフォールバックポリシーを設定します。

builder.Services
    .AddAuthentication(NegotiateDefaults.AuthenticationScheme)
    .AddNegotiate();

builder.Services.AddAuthorization(options =>
{
    // 未認証時のフォールバックポリシーをデフォルトに設定する。
    options.FallbackPolicy = options.DefaultPolicy;
});

そして同様にProgram.csで、ビルドされたアプリケーションで認証と認可を有効にします。

app.UseAuthentication();
app.UseAuthorization();

UseAuthorizationはすでに有効になっているかもしれませんが、忘れるといけないので書いておきます。

最後にlaunchSettings.jsonでWindows認証と匿名アクセスの設定を変更します。

    "windowsAuthentication": true,
    "anonymousAuthentication": false,

その上で、Web APIにAuthorize属性を宣言します。

[Authorize]
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase

クラス全体に宣言できますし、メソッド単位で宣言することもできます。

API側では、つぎのように認証情報を利用できます。

var identity = User.Identity;

これで設定は完了です。

Clientサイド

HttpClientを利用している場合、つぎのようにHttpClientHandlerを設定すると、操作しているユーザー情報で認証されます。

HttpClientHandler handler = new HttpClientHandler()
{
    UseDefaultCredentials = true
};

HttpClient httpClient = new HttpClient(handler);

Discussion