web-dev-qa-db-ja.com

ASP .NET Core Identityのデフォルト認証とJWT認証

ASP NET Core Web APIを開発していて、認証方法を選択することに戸惑っています。以前はデフォルトのAsp Net Identity認証を適用していましたが、最近JWTについて知っています。 https://stormpath.com/blog/token-authentication-asp-net-core ですが、このJWTの利点を理解できません。単純なAsp Net Identity Authentication、トークンの保存などは気にしません。signInManagerを使用してログインし、ログアウトするまで承認されたメソッドを使用するだけです。JWTでは、トークンストア、有効期限、およびその他の問題を考慮する必要があります。したがって、このJWTの利点は何ですか?ログイン後にこのJWTトークンをどのように保存できますか?さらに、このJWTを使用する必要がありますか?私の場合、1人または少し多くのユーザーが使用する単純なWebApiの単純な認証が必要です。私はOpenIddict、Auth0、IdentityServerについても聞いたので、これらすべての認証メカニズムの違いは何ですか?

15
Andrew K

これは私がこれを理解する方法であり、3つの論理部分に分割されます。

  1. 認証サーバー-APIがトークンを検証する必要がある場合、これはJWTトークンを認証および発行し、トークンをこのサーバーに送信して検証します。
  2. クライアント-これはあなたのウェブページやあなたのアプリに役立つものです。これは、JWTトークンを要求して格納するために必要なものです。クライアントは、データをリクエストするたびにAPIにトークンを渡す必要があります。
  3. API-これは情報を提供するものであり、認証サーバーでトークンを検証する必要があります。

では、このJWTの利点は何ですか?

JWTはクライアントに発行され、クライアント側に格納されます。 JWTを使用すると、複数のクライアント(アプリまたはWebサイト)がJWTを配布する同じ認証サーバーを使用できるようになり、クライアントが使用できるAPIとその方法が示されます。

ログイン後にこのJWTトークンをどのように保存できますか?

私はそれをIonic 2アプリを使用して保存しようとしましたangular 2これはストレージモジュールを持っています。しかし、多くの人がこれを実行したと確信していますすでにこの質問をしました:

ASP.NET Core 1.0 Web APIでの単純なJWT認証

ASP.NET Coreでのトークンベースの認証(更新)

Updateフロントエンドが純粋にhtml/js/cssで作成され、それに対応するバックエンドがない場合は、トークンをローカルストレージに保存します、これに役立つ複数のnpmパッケージがあります これのように 。暗黙的なフローを探します。

それ以外に、選択したセッション/データベースにトークンを格納するフロントエンドに付属するバックエンドがある場合、IdentityServer4のようにこれを行うサードパーティプロバイダーがあります。ハイブリッドフローを使用したい

さらに、このJWTを使用する必要がありますか?私の場合、1人または少し多くのユーザーが使用する単純なWebApiには単純な認証が必要です。

懸念が完全に分離する理由はパフォーマンスです。そのため、ユーザーは1人かもう少しなので、実際には必要ありません。 JWTは学習体験であるため、最初からセットアップするのは簡単ではなく、多くの読書をする必要があり、失敗し、イライラしますが、最後にあなたはそれを設定する方法とそれがどのように機能するかを知っています

OpenIddict、Auth0、IdentityServerについても聞いたことがあります。これらの認証メカニズムの違いは何ですか?

したがって、Stormpathチュートリアルで行ったことは、本番環境では準備できていません。これはほんの少しのデモであり、JWTとは何か、およびJWTの仕組みを理解するのに役立ちます。上記は完全なライブラリであり、面倒な作業すべてに取り組み、最初からすべてを構築する必要はありません。そして、それらの主な違いは、それらがカバーする範囲です。

私は個人的にIS4を使用しており、2回以下で泣きました(思ったより簡単でした): http://identityserver4.readthedocs.io/en/release/

https://github.com/openiddict/openiddict-core

https://auth0.com/docs/quickstart/webapp/aspnet-core/00-intro

11
Anton Toshik

APIに複数のアプリケーションまたはサービス(Web、モバイル、その他のサービス)接続がある場合は、トークン(JWT)を使用します。利点:ステートレス、スケーラビリティ、Cookieなし、CORSの問題なし(許可する場合)。

APIを1つのWebアプリケーションのみで使用する場合は、デフォルトのASPデフォルトの認証システムを使用します。設定が簡単です。

6
petar.kekez

WebAPIとユーザーインターフェイスが同じWebアプリケーションでホストされている場合、トークンベースのセキュリティは、組み込み認証によって提供されるCookieベースの認証では何も購入しません。これは、HTTPリクエストごとに認証Cookieがkeepアプリケーションに送り返されるためです。あなたがそれらのクッキーでサインインしたもの以外のウェブサイトに電話をかけるとき、送信されません。そのため、JSON Web Token(JWT)は、Cookieを使用できない場合に、ブラウザーがID情報をWebサイトに送信するための標準形式を提供します。

3
GlennSills

AJAX=呼び出しでWeb APIにアクセスする場合は、JWTを選択することをお勧めしますが、必須ではありません。アプリの説明から判断すると、デフォルトの認証システムではAuth2は、Facebookなどの外部ログインを可能にする認証メカニズムです。Auth2はデフォルトの認証システムの一部であり、アプリで使用するために多くのことを行う必要はありません。

OpenIddictはAuth2の上にあります。これはデフォルトの認証システムの一部であり、アプリで使用するために多くのことを行う必要はありません。 Google+などの外部ログインを可能にする認証メカニズムです

IdentityServerは、Ajax呼び出しによってアクセスされる大きなWep Apiに使用できます。たとえば、IdentityServerを使用して、フロントエンドに憧れるユーザーを認証することができますAngular app。

繰り返しになりますが、デフォルトの認証システムはうまく機能します。

お役に立てれば...

3
Issac