ASP.Net Core 2.0を使用しています。個別のユーザーアカウント認証タイプでWeb APIプロジェクトを構築したいのですが、唯一のオプションはConnect to an existing user store in the cloud
です。
Store user accounts in-app
を持つ個々のユーザーアカウントを持つWeb APIのテンプレートを追加するにはどうすればよいですか?
このオプションは、Webアプリケーションでは使用できますが、Web APIでは使用できません。
次のコマンドを使用して、コンソールでプロジェクトを開始してください
dotnet new webapi -au Individual
その後、VSでプロジェクトを開くことができます。 (ダイアログを回避するため)。次に、たとえばauthorize-attributeを使用できます。ただし、プロジェクトはまだAzure Bearer Authenticationを使用するように構成されています。どこからアイデンティティを取得するかを決める必要があります。 identityserver4を使用するか、独自の「ASP.NET Core Identityのカスタムストレージプロバイダー」を構築できます( MS-Docs )
MVC WebAppとの違い:ここには、登録を処理し、ユーザー名とパスワードなどを取得するビューを持つアカウントコントローラーがあります。
同じことに戸惑い、結局Web Application
の代わりに Web API
。 MSにはおそらく「アプリ内アカウント」を削除するロジックがあります。WebAPIを使用すると、おそらくSPAを記述し、クライアントコードに「ビュー」(ログイン、パスワードを忘れたなど)を含める必要があります。サーバー上のRazorビューではありません。
IdentityServer 4を使用する場合、ビューはIS4アプリケーションで生成されることに注意してください。 not Business APIアプリケーション。
マイクロソフトはここでヒントを与えようとしていると思います...
答えを得るために、認証なしのAPIバージョンとバージョンありの両方を構築し、生成されたフォルダーで差分を作成しました(そして、cloud-authオプションを使用したときに表示されるappsettings.jsonの余分なコードブロックを無視しました)。
認証を有効にするのに必要なコードはわずか数行です。
APIテンプレートの非認証バージョンに以下の変更を加えると、認証バージョンが得られます。
Startup.csで、「using」セクションに_using Microsoft.AspNetCore.Authentication;
_を追加します。以下に示すように、app.UseAuthentication();
の直前にapp.UseMvc();
を追加します。
_public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseMvc();
}
_
Controllers\ValuesController.csで、「using」セクションに_using Microsoft.AspNetCore.Authorization;
_を追加します。また、追加します:_[Authorize]
_ [Route("api/[controller]")]
のすぐ上
Vanilla APIテンプレートにテンプレート認証を追加するのに必要なことはこれだけです。もちろん、実際の認証コードを追加する必要がありますが、テンプレートレベルで完了です。
(注:Authバージョンでは、UserSecretsIdを使用するというMicrosoftのオプションの仮定もありました。したがって、それも必要な場合は、ソリューションを右クリックして[ユーザーシークレットの管理]を選択します。)