1
私は、.netコアmvc アプリケーションでポリシーベースの認証を実装しました。コード:私は、.netコアのユーザーセッションごとに異なる変数の値を維持する必要があります
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ValidUserAuthorization requirement)
{
List<KeyValuePair<string, string>> parameters = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("UserAlias", context.User.Identity.Name.Split('@')[0])
};
var isAuthorized = this.CubeServiceManager.GetDataFromService("CheckIfAuthorized", "GET", this.ConnectionStrings.BaseAddress, parameters);
if (isAuthorized == "true")
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
私はこの非同期メソッドを毎回呼び出すコントローラレベルでの承認の属性を追加しました。 の値が「」の場合、ユーザーは許可されます。 しかし、非同期メソッドの呼び出しごとに、isAuthorizedの値を設定するためのサービス呼び出しが行われています。これは各ユーザーごとにセッションごとにキャッシュします。 この認証ハンドラではどうすればいいですか?
論理的には、あなたは、あなたのサービスには、この呼び出しの結果をキャッシュすることはできません。各リクエストは個別に承認を確認する必要があります。さもなければ、許可された最初の人は、キャッシュが持ち去られている限り、他の人たちも事実上すべての人物を許可することができます。同様に、「許可されていない」としてキャッシュされている場合、キャッシュが保持されている限り、誰も許可されることはありません。 –
@ChrisPrattユーザーごとにユニークなキーでセッションを使用するとどうなりますか? –
これは安全ですが、それでも同じような問題があります。情報が「キャッシュされる」期間によっては、正しい認証ステータスが返されないことがあります。一般的に言えば、サービスを介して権限を与える場合は、すべての要求を行う必要があります。あなたがキャッシュするべきではありません。 –