Azure AD 인증을 사용하여 Azure App Service에서 호스팅되는 ASP.NET MVC Webapp용 Azure Front door를 설정하는 방법

5036 단어

웹앱 만들기 - Azure App Service



웹앱 만들기 - 우리가 만들고 있는 웹앱을 호스팅할 Azure 앱 서비스입니다.

Azure AD 보호 웹앱 만들기



Open ID 연결을 사용하여 Azure AD 인증으로 dotnet 코어 웹앱을 만듭니다.

Azure AD를 사용하여 웹앱을 만들려면 이 문서를 따르세요.

https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-asp-webapp

Azure 전면 도어 만들기





Front Door 끝점 만들기





현관문 오리진 그룹 생성





현관문 원점 생성





앞문 설정은 위의 모든 단계를 거친 후 다음과 같습니다.









여기에서 호스트 헤더를 비어 있도록 업데이트해야 합니다.



Azure AD에서 리디렉션 Uri 업데이트



프런트 도어 엔드포인트 URL을 사용하여 Azure AD의 리디렉션 Uri를 업데이트합니다.

Front door의 리디렉션 Uri로 Webapp 업데이트



웹앱이 Azure Front Door 뒤에 있으면/authorize 요청의 redirect_uri가 Front Door의 주소가 되도록 구성해야 합니다.

아래 코드에서는 "OnRedirectToIdentityProvider"이벤트를 재정의하고 Front Door의 주소를 삽입합니다. 이 작업을 시도할 때 단순히 주소를 하드코딩했지만 이상적으로는 Front Door가 요청에 삽입하는 헤더에서 주소를 추출하는 것입니다.

이것은 Azure Front Door 뒤에서 실행되는 Azure AD로 보호되는 Azure App Service에서 실행되는 내 dotnet 코어 서버 앱(.net 6)을 인증하려고 할 때 사용한 코드입니다.

public void ConfigureServices(IServiceCollection services)
{
    // ... existing code

    services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
                .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))
                .EnableTokenAcquisitionToCallDownstreamApi(new[] { "User.Read" })
                .AddInMemoryTokenCaches();

    services.Configure<OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options =>
    {
        options.Events = new OpenIdConnectEvents
        {
            OnRedirectToIdentityProvider = (context) =>
            {   
                // Override the redirect_uri
                // Ideally extract this from config 
                // Or context.Request.Headers["X-Forwarded-Host"]
                // see: https://docs.microsoft.com/en-us/azure/frontdoor/front-door-http-headers-protocol#front-door-to-backend

                context.ProtocolMessage.RedirectUri 
                    = "https://YOUR-FRONT-DOOR-or-APP-GATEWAY/signin-oidc";
                return Task.FromResult(0);
            }
        };
    });

    services.Configure<ForwardedHeadersOptions>(options =>
    {
        options.ForwardedHeaders = ForwardedHeaders.XForwardedFor |
                        ForwardedHeaders.XForwardedProto;
        options.KnownNetworks.Clear();
        options.KnownProxies.Clear();
    });

    // ... existing code
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // ... existing code

    // Don't forget to add this ...
    app.UseForwardedHeaders();

    // ... existing code
}



코드가 작동하면 "redirect_uri"매개변수는 여기에 표시된 대로 정문/게이트웨이를 가리켜야 합니다.



참조



https://stackoverflow.com/questions/61733729/authentication-with-azure-ad-redirect-uri-is-incorrect-using-frontdoor

좋은 웹페이지 즐겨찾기