.NET Core 3.1에서 Azure Active Directory 인증 수행
Angular에서 Azure Active Directory 인증 수행 의 계속입니다.
클라이언트 애플리케이션(Angular)의 요청 헤더에는 jwt가 있으므로 jwt에 의한 AAD 인증으로 웹 API를 보호합니다.
Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.SpaServices.AngularCli;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.AspNetCore.Authentication.AzureAD.UI;
using Microsoft.AspNetCore.Authentication;
namespace AadSample
{
public class Startup
{
public Startup(IHostEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfiguration Configuration { get; }
// DIを定義
public void ConfigureServices(IServiceCollection services)
{
// Azure ADのServiceをDIの定義を追加
// Configuration.Bind("AzureAd", options)でappsettings.jsonから必要な接続情報を取得する
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
// …他のDI
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
if (!env.IsDevelopment())
{
app.UseSpaStaticFiles();
}
app.UseRouting();
app.UseAuthentication(); // 追記
app.UseAuthorization(); // 追記
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller}/{action=Index}/{id?}");
});
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
}
}
}
appsettings.json
AzureAd
스키마에 Azure 포털에서 만든 AAD 구성 정보를 포함{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "{例:hogehoge}.onmicrosoft.com",
"TenantId": "{ディレクトリ(テナント)ID}",
"ClientId": "{アプリケーション(クライアント)ID}"
},
"AllowedHosts": "*"
}
HogeController
인증이 필요한 Controller에
[Authorize]
속성을 부여합니다.[HttpGet]
[Route("GetWeatherForecast")]
[Authorize]
public IEnumerable<WeatherForecast> Get()
{
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
CustomFilterAttribute를 사용하여 인증하는 경우
IAuthorizationFilter
를 상속합니다.using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
namespace AadSample
{
/// <summary>
/// 認証フィルター
/// </summary>
public class CustomAuthorize : Attribute, IAuthorizationFilter
{
/// <summary>
/// 認証チェック
/// </summary>
/// <param name="context"></param>
public void OnAuthorization(AuthorizationFilterContext context)
{
var user = context.HttpContext.User;
if (user.Identity.IsAuthenticated)
{
return; // 認証済みならAPIを実行
}
else
{
context.Result = new UnauthorizedResult(); // 未認証なら401を返す
}
}
}
}
참고 URL
보호된 웹 API 앱 구성 - Microsoft identity platform | Microsoft Docs
Reference
이 문제에 관하여(.NET Core 3.1에서 Azure Active Directory 인증 수행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SuyamaDaichi/items/e45eed862b9267adfd9c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)