ID認証に基づいてマルチテナントアプリケーションを開発します。各ユーザーは、データベースに格納されたトークンセッションを取得して、ユーザーがまだ接続されているかどうかを確認します(有効期限があります)。私はユーザーClaim
にトークン(およびユーザー会社に関する他の情報)を保存します。そのアイデンティティがユーザーがまだ接続されていることを検出した後、ユーザートークンがデータベース内でまだ有効かどうかを確認する必要があります(ただし、彼が接続している場合のみ)。AuthorizationHandler
を実装しました。AuthorizationHandlerとデータベース依存性注入
public TokenValidHandler(MyDatabaseService service)
{
// No information about the user connection string
}
protected override async void Handle(AuthorizationContext context, TokenValidRequirement requirement)
{
// Check the token in database
}
そして、私はこのように私のハンドラを登録します。我々は、マルチテナントアプリケーションを持っているので、ユーザーがアプリケーションを終了し、サイトを再開いたとき
services.AddAuthorization(options =>
{
options.AddPolicy("TokenValid",policy => policy.Requirements.Add(new TokenValidRequirement()));
});
services.AddSingleton<IAuthorizationHandler, TokenValidHandler>();
、彼の接続文字列が失われました(私たちはデータベース文字列を保持したくないので)、Claim
に格納された情報を使用してデータベースアクセスを回復します。認証が期限切れになった場合、Claim
に情報がありませんので、自分のデータベースにアクセスできません。
私が見る通り、TokenValidHandler
は接続されていなくてもインスタンス化されていますが、それは正常ですか?私のデータベースサービスに依存性注入を使用したいのであれば、ユーザーデータベースアクセスに関する情報がここにないため、私はできません。それについてのアイデア?
IServiceProviderを使用するソリューションが見つかったので、私のデータベースサービスをHandlerメソッドに入れました。依存性インジェクションではなく、クリーンソリューションではありません。 –