web-dev-qa-db-ja.com

ASP.NET Core 2.0のWeb APIのローカルユーザーアカウントストア

ASP.Net Core 2.0を使用しています。個別のユーザーアカウント認証タイプでWeb APIプロジェクトを構築したいのですが、唯一のオプションはConnect to an existing user store in the cloudです。 Create new project screenshot

Store user accounts in-appを持つ個々のユーザーアカウントを持つWeb APIのテンプレートを追加するにはどうすればよいですか?

このオプションは、Webアプリケーションでは使用できますが、Web APIでは使用できません。

30
Kahbazi

次のコマンドを使用して、コンソールでプロジェクトを開始してください

dotnet new webapi -au Individual

その後、VSでプロジェクトを開くことができます。 (ダイアログを回避するため)。次に、たとえばauthorize-attributeを使用できます。ただし、プロジェクトはまだAzure Bearer Authenticationを使用するように構成されています。どこからアイデンティティを取得するかを決める必要があります。 identityserver4を使用するか、独自の「ASP.NET Core Identityのカスタムストレージプロバイダー」を構築できます( MS-Docs

MVC WebAppとの違い:ここには、登録を処理し、ユーザー名とパスワードなどを取得するビューを持つアカウントコントローラーがあります。

13
Kirsten

同じことに戸惑い、結局Web Application の代わりに Web API。 MSにはおそらく「アプリ内アカウント」を削除するロジックがあります。WebAPIを使用すると、おそらくSPAを記述し、クライアントコードに「ビュー」(ログイン、パスワードを忘れたなど)を含める必要があります。サーバー上のRazorビューではありません。

IdentityServer 4を使用する場合、ビューはIS4アプリケーションで生成されることに注意してください。 not Business APIアプリケーション。

マイクロソフトはここでヒントを与えようとしていると思います...

5
Felix

答えを得るために、認証なしの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のオプションの仮定もありました。したがって、それも必要な場合は、ソリューションを右クリックして[ユーザーシークレットの管理]を選択します。)

2
Clearhat