(編集 - 適切な修正が見つかり下記を参照してください!)ネットコア2.0のWeb APIは - 追加のアイデンティティは、JWTの認証を破る
OK - しかし、これはネットコア2.0および認証で私の最初の試みであります私はこれまでWeb API 2.0を使っていましたが、ここ数年の間にさまざまなMVCやWebforms ASPプロジェクトでかなり広く働いてきました。
.Net Coreを使用してWeb API ONLYプロジェクトを作成しようとしています。これにより、レポートを作成するためのマルチテナントアプリケーションのバックエンドが形成されるため、ユーザーを認証できる必要があります。通常は、JWTを使用する方法があります。まず、ユーザーを認証してトークンを生成し、それをクライアントに渡してすべてのAPI要求で使用します。データはEFコアを使用して保存および取得されます。
私は、この設定を得るための基本的な方法として、this postに従っています。これは正常に動作するように管理しました。ユーザー名/パスワードを受け入れ、有効な場合はトークンを返し、請求項に基づく。
私が必要とする次のことは、実際にユーザー/パスワード/ etcを管理することです。私はちょうど.Net Core Identityを使って、ユーザー/ロール、パスワードなどについて心配する準備が整ったコードがたくさんあると思っていました。私はカスタムUser
クラスとから派生したUserRole
クラスを使用していましたとIdentityRole
クラスが、私は今すぐ標準のものに戻ってきました。
身分証明書を追加する方法がわかりません。&すべてのさまざまなサービス(rolemanager、usermanagerなど)を登録しなくても、認証を破棄する必要はありません。 Startup.ConfigureServices
クラス:
services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<MyContext>();
それはすべてうまくいかない、と私は要求を受信したとき、私はもはや主張を見ることができるので、すべてのポリシーがちょうどロックダウン、あなたが何を取得することはできません。
私はこれらの行がなければ、UserManager、RoleManager、UserStoreなどのエラーはすべてDIに登録されていません。
どうすればいいですか?アイデンティティを登録してコンテキストに正しく接続することはできますが、実際の認証メカニズムへの変更は避けてください。
私は公正なビットをオンラインで見たことがありますが、多くのチュートリアルなどは本当に有効ではないので、.Net Core 1.x以降に変更されています。
私はこのAPIアプリケーションにフロントエンドコードを使用するつもりはないので、フォームなどのクッキー認証は必要ありません。
編集
[OK]を、私は今、このコードでStartup.ConfigureServices()
方法でJWT認証を設定することがわかってきました:「私は経由(示された行にブレークポイントを置く場合
services.AddAuthentication(
JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
>>breakpoint>>> options.TokenValidationParameters =
new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "Blah.Blah.Bearer",
ValidAudience = "Blah.Blah.Bearer",
IssuerSigningKey =
JwtSecurityKey.Create("verylongsecretkey")
};
});
> >ブレークポイント>>> ")を実行しないとヒットするアイデンティティサービスを追加する行を追加しますが、それらの行を追加すると、は決してになります。これは、方法のどこでservices.AddIdentity()
コールを呼び出しても問題ありません。私はこれが単なるラムダなので、後で実行されることになりますが、AddIdentityのものを認証を設定したり、コードをすぐに削除したりする方法はありますか?あなたが持っている場合、私は...アイデンティティのものはすでにそれを設定しているように私が設定した設定のためのラムダを実行しないことを選択したいくつかのコードがありますいくつかの点ですべてのことを読み取るための
感謝を想定:)
基本的には https://github.com/aspnet/Identity/issues/1376私がしなければならなかった二重だったもの: -
EDIT見つかり
OK答えは、私は最終的には基本的に、まさにこの問題で、このGHの問題を発見した
ENS
services.AddAuthentication(
JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
...
:services.AddIdentity<IdentityUser, IdentityContext()
への呼び出しが最初
変更から認証を追加するための呼び出しを行ったことUREこれはうるさく作成されたクッキーにつながるん
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
...
が、これは私が言うことができる限り認証には使用されません。少なくとも、コントローラー/アクションへの要求にはベアラートークンを使用しています(少なくとも[Authorize(Policy = "Administrator")]
または類似のセットを持っています)。
私はそれが何らかの方法で動作していないことがわかった場合、私はより多くをテストする必要があり、私はここに戻ってこれを更新しようとします。
(編集 - 今答えとしてで適切なソリューションを置く)
あなたは私を救った。ありがとう –
あなたはこれを質問に分解し、それからあなた自身が正しい答えとして答えることを検討すべきです。 – alwayslearning
@alwayslearningは悪い考えではないので...そうしました。 – GPW