ネットの7 webapp Dockerのhttps、azure広告によって確保


私は認めなければなりません、これは奇妙で厳しいものでした.私がしたかったすべては、ASPを走らせることでした.HTTPSとAzureアクティブディレクトリ認証を使用してコンテナ内のネットかみそりページのアプリ.さて、これは間違いなく楽しいものだった.このブログ記事では、次の手順を正確に説明します
  • エクスポート.docdevで使用するnet dev certs
  • Azure AD認証の構成
  • クッキーポリシーを設定します.ネット
  • devのcertsを使用するようにDockerを設定します
  • エクスポート.NET dev - certs


    Dockerとhttpsでローカルdevで動作できるようにするには、証明書が必要です.そして、CERTを得る最も簡単な方法は、.NET dev - certs -彼らは無料で利用可能です.

    Note: this should only be used for local Dev to unblock certain scenarios


    お好みの端末を開き、次のように入力します
    dotnet dev-certs https --clean
    dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <your secret>
    
    ### If you're using PowerShell, then you have to use the following command instead
    dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\aspnetapp.pfx -p <your secret>
    
    dotnet dev-certs https --trust
    

    ASPを構成します。NETコアWebアプリ


    デフォルトでは、ASP .ネットコアのウェブサイトは、HSTSとHTTPSリダイレクションを有効にします.これは、アプリケーションの実行時に、TLS対応ポートへのすべての要求をリダイレクトし、リダイレクトすることを意味します.私は、標準に私のものをセットするのが好きです5001 以来.NET 6と7は、アプリケーションのポートをランダムになりました.場合は、デフォルトのポートを変更することができますProperties\launchSettings.json ファイル.これは私の見たものです.
    {
      "iisSettings": {
        "windowsAuthentication": false,
        "anonymousAuthentication": true,
        "iisExpress": {
          "applicationUrl": "http://localhost:43362",
          "sslPort": 44382
        }
      },
      "profiles": {
        "AzureADAuthInDocker": {
          "commandName": "Project",
          "dotnetRunMessages": true,
          "launchBrowser": true,
          "applicationUrl": "http://localhost:5000;https://localhost:5001",
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
          }
        },
        "IIS Express": {
          "commandName": "IISExpress",
          "launchBrowser": true,
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
          }
        }
      }
    }
    
    
    必要な認証を実装するには、次のnugetパッケージを追加する必要があります.
  • マイクロソフト.アイデンティティ.ウェブ
  • マイクロソフト.アイデンティティ.ウェブUI
  • appsettings.json ファイルを追加します.
    "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "Domain": "<your Azure AD tenant name>.onmicrosoft.com",
        "TenantId": "<your Azure AD tenant ID>",
        "ClientId": "<your Azure AD App Registration client ID>",
        "CallbackPath": "/signin-oidc"
      },
    
    更新program.cs 次のコードを追加します
    builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"));
    
    builder.Services.AddAuthorization(options =>
    {
        // By default, all incoming requests will be authorized according to the default policy.
        options.FallbackPolicy = options.DefaultPolicy;
    });
    builder.Services.AddRazorPages()
        .AddMicrosoftIdentityUI();
    
    
    // code ommitted
    
    app.UseAuthentication();
    app.UseAuthorization();
    
    
    この時点で、アプリケーションをローカルで使用することができますdotnet run そして、すべてが正しく構成されているならば、あなたはあなたの組織(Azure広告)アカウントで認証するよう求められるべきです

    クッキーポリシーの作成


    お使いのソリューションでクッキーを使用する場合は、クッキーポリシーを追加する必要があります.インProgram.cs 認証設定の上に次のコードを追加します.
    builder.Services.Configure<CookiePolicyOptions>(
        options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
            options.Secure = CookieSecurePolicy.Always;
        });
    
    それから、ちょうどapp.UseAuthentication() これを追加する必要があります.
    app.UseCookiePolicy();
    
    アプリケーションを実行し、すべての作業を期待通りにテスト!
    以下のようにクッキーのエラーを取得する場合は、正しい設定を確認してください.すべてをチェックしてみてください.

    当社のWebアプリのための設定Docker


    Dockerとの作業に関しては、Linuxコンテナを使いたいなら、Dockerデスクトップをインストールし、WSL 2を有効にする必要があります.これらを正しくインストールするようにしてください.
    Dockerファイルを作成するとき、私は私のための重いリフティングを行うためにVSのコードに傾くことが好きです.あなたのASPのものを設定する方法に関する情報を見つけることができます.ネットアプリhere
    VSコードパレットから適切なDockerコマンドを実行するには、次の3つのファイルを生成します.
  • Dockerfile
  • Dockerの作成気象研
  • Dockerの作成デバッグ.気象研
  • 私の左Dockerfile ほとんどは変更されませんでした.http://+:5000;https://+:5001マイdocker-compose.yml ファイルは以下のようになります:
    version: '3.4'
    
    services:
      azureadauthindocker:
        image: azureadauthindocker
        build:
          context: .
          dockerfile: ./Dockerfile
        ports:
          - 5000:5000
    
    そして最後に、変化の大部分はdocker-compose.debug.yml
    # Please refer https://aka.ms/HTTPSinContainer on how to setup an https developer certificate for your ASP .NET Core service.
    
    version: '3.4'
    
    services:
      azureadauthindocker:
        image: azureadauthindocker
        build:
          context: .
          dockerfile: ./Dockerfile
        ports:
          - 5000:5000
          - 5001:5001
        environment:
          - ASPNETCORE_ENVIRONMENT=Development
          - ASPNETCORE_URLS=https://+:5001;http://+:5000
          - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
          - ASPNETCORE_Kestrel__Certificates__Default__Password=<your secret>
        volumes:
          - ~/.vsdbg:/remote_debugger:rw
          - C:\Users\chmatsk\.aspnet\https:/https/:ro
    
    これらの変更で、私は直接私のWebアプリを直接のコードからDockerの内部を実行することができます.
    そしてこれはすべてのエンドツーエンドで動作する例です

    コマンドラインからコンテナーを実行する場合は、使用するコマンドです
    docker run --rm -it -p 5000:5000 -p 5001:5001 -e ASPNETCORE_URLS="https://+:5001;http://+:5000" -e ASPNETCORE_HTTPS_PORT=5001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="<your secret>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v C:\Users\chmatsk\.aspnet\https:/https/ <your image>
    
    このコマンドを実行すると、次の出力が生成されます.https://localhost:5001
    あなたが質問をするならば、手を伸ばしてください!