これは、次の機能を備えたTodoアプリケーションです。
それはショーケース:
dotnet tool install dotnet-ef -g
TodoApi
mkdir .db
dotnet ef database update
JWT 生成のキーを初期化するには、TodoApi フォルダーを実行します。
dotnet user-jwts
dotnet user-jwts create
アプリケーションを実行するには、Todo.Web/Server と TodoApi の両方を実行します。以下は、両方のアプリケーションを実行するさまざまな方法です。
Visual Studio - ソリューションを右クリックして [プロパティ] を選択して、複数のスタートアップ プロジェクトをセットアップします。スタートアップ プロジェクトとして [と] を選択します。
TodoApi
Todo.Web.Server
Visual Studio Code - Todo.Web.Server と TodoApi で実行される 2 つのターミナル ウィンドウを開きます。
dotnet watch run -lp https
これにより、プロファイルを使用して両方のアプリケーションが実行されます。
https
Tye - 次のコマンドを使用してグローバル ツールをインストールします。
dotnet tool install --global Microsoft.Tye --version 0.11.0-alpha.22111.1
リポジトリのルートで実行し、tye ダッシュボード (通常は http://localhost:8000) に移動して、両方のアプリケーションが実行されていることを確認します。
tye run
Docker Compose - ターミナルを開き、このプロジェクトのルート フォルダーに移動して、次のコマンドを実行します。
dotnet 発行から直接 Docker イメージをビルドします。
TodoApi
dotnet publish ./TodoApi/TodoApi.csproj --os linux --arch x64 /t:PublishContainer -c Release
dotnet 発行から直接 Docker イメージをビルドします。
Todo.Web.Server
dotnet publish ./Todo.Web/Server/Todo.Web.Server.csproj --os linux --arch x64 /t:PublishContainer -c Release --self-contained true
証明書を生成し、ローカルマシンを構成して、docker composeを使用してhttpsサポートを使用してアプリを起動できるようにします。
Linux コンテナーを使用するウィンドウ
set PASSWORD YourPasswordHere dotnet dev-certs https -ep ${HOME}/.aspnet/https/todoapps.pfx -p $PASSWORD --trust
macOS または Linux
export PASSWORD=YourPasswordHere dotnet dev-certs https -ep ~/.aspnet/https/todoapps.pfx -p $PASSWORD --trust
ファイル内の以下の変数を、https 証明書とパスワードと一致するように変更します。
docker-compose.yml
ASPNETCORE_Kestrel__Certificates__Default__Password
ASPNETCORE_Kestrel__Certificates__Default__Path
実行して、アプリtodo-apiとtodo-web-serverに加えて、jaegerとprometheusをスピンアップします。
docker-compose up -d
Todo Web アプリ https://localhost:5003 に移動します。
Todo REST API はスタンドアロンでも実行できます。TodoApi プロジェクトを実行し、Swagger UI (または任意のクライアント) を使用してさまざまなエンドポイントに要求を行うことができます。
リクエストを実行する前に、ユーザーを作成して認証トークンを取得する必要があります。
新しいユーザーを作成するには、アプリケーションを実行し、JSON ペイロードをエンドポイントに POST します。
/users
{
"username": "myuser",
"password": "<put a password here>"
}
上記のユーザーのトークンを取得するには、上記で指定したのと同じユーザー名でJWTトークンを作成します。
dotnet user-jwts
dotnet user-jwts create -n myuser
このトークンを使用して、todo エンドポイントに対して認証された要求を行うことができる必要があります。
ユーザー jwt の詳細
ユーザー名とパスワードに加えて、ソーシャル認証プロバイダーは、この todo アプリケーションと連携するように構成できます。デフォルト Github、Google、およびMicrosoftアカウントをサポートしています。
これらの各プロバイダーを設定する手順については、次の場所を参照してください。
クライアント ID とクライアント シークレットを取得したら、これらのプロバイダーの構成を次のスキーマで追加する必要があります。
{
"Authentication": {
"Schemes": {
"<scheme>": {
"ClientId": "xxx",
"ClientSecret": "xxxx"
}
}
}
}
または環境変数を使用する:
Authentication__Schemes__<scheme>__ClientId=xxx Authentication__Schemes__<scheme>__ClientSecret=xxx
または、ユーザー シークレットを使用します。
dotnet user-secrets set Authentication:Schemes:<scheme>:ClientId xxx dotnet user-secrets set Authentication:Schemes:<scheme>:ClientSecret xxx
他のプロバイダーはここにあります。 これらは、認証拡張機能にも追加する必要があります。
注: クライアント シークレットを構成に保存しないでください。
ソーシャル認証と同様に、このアプリケーションは外部オープンID接続(OIDC)サーバーもサポートしています。外部認証 ソーシャル認証プロバイダーのように扱われますが、TodoAPIで使用できるアクセストークンも生成されます。これ Todo.Web.Server アプリケーションのソーシャル プロバイダーと追加の認証スキームのように構成する必要があります。 認証サーバーによって発行された JWT トークンを受け入れるように TodoAPI で構成する必要があります。
フローは次のようになります。
認証を構成する方法を次に示します。
{
"Authentication": {
"Schemes": {
"<scheme>": {
}
}
}
}
注: クライアント シークレットを構成に保存しないでください。
このサンプルでは、Auth0 が OIDC サーバーとして構成されています。次のスキーマで構成できます。
{
"Authentication": {
"Schemes": {
"Auth0": {
"Audience": "<audience>",
"Domain": "<domain>",
"ClientId": "<client id>",
"ClientSecret": "<client secret>"
}
}
}
}
TodoAPI を構成する例を次に示します。
{
"Authentication": {
"Schemes": {
"Auth0": {
"ValidAudiences": [ "<your audience here>" ],
"Authority": "<your authority here>"
}
}
}
}
Auth0 .NET SDK の詳細については、こちらを参照してください。
TodoApi は OpenTelemetryを使用してログ、メトリクス、スパンを収集します。
収集されたテレメトリを表示する場合は、次の手順に従います。
docker run -d -p 9090:9090 --name prometheus -v $PWD/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
OTEL_EXPORTER_OTLP_ENDPOINT
.AddOtlpExporter
builder.Services.AddOpenTelemetryTracing
TodoApi/OpenTelemetryExtensions.cs
docker run -d --name jaeger -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 -e COLLECTOR_OTLP_ENABLED=true -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778 -p 16686:16686 -p 4317:4317 -p 4318:4318 -p 14250:14250 -p 14268:14268 -p 14269:14269 -p 9411:9411 jaegertracing/all-in-one:latest
このアプリは、この目的のためにSerilogを使用しています
structured logging
Serilogを設定するには、SerilogExtensionsクラスを呼び出し、適切なオプションを使用してセクションを追加する必要があります
AddSerilog
Serilog
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}
ログの収集と検索には、本番環境に基づいて2つの方法があります。
optional
your needs
seqを使用するには、appsettings.jsonのセクションの設定値で有効にする必要があります。
SeqUrl
Serilog
"Serilog": {
...
"SeqUrl": "http://localhost:5341",
...
},
また、docker-composeファイルでseqサーバーを実行する必要がありますが、seqが http://localhost:8081 で利用可能になり、そこにログが表示されます。
エラスティックサーチとキバナを使用するには、appsettings.json のセクションで設定値を使用して有効にする必要があります。
ElasticSearchUrl
Serilog
"Serilog": {
...
"ElasticSearchUrl": "http://localhost:9200",
...
}
また、ドッカー作成ファイルでElasticsearchとKibanaを実行する必要がありますが、kibana url http://localhost:5601 でログを確認できます。 インデックス名 。
todoapi