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の値を設定するためのサービス呼び出しが行われています。これは各ユーザーごとにセッションごとにキャッシュします。 この認証ハンドラではどうすればいいですか?

+0

論理的には、あなたは、あなたのサービスには、この呼び出しの結果をキャッシュすることはできません。各リクエストは個別に承認を確認する必要があります。さもなければ、許可された最初の人は、キャッシュが持ち去られている限り、他の人たちも事実上すべての人物を許可することができます。同様に、「許可されていない」としてキャッシュされている場合、キャッシュが保持されている限り、誰も許可されることはありません。 –

+0

@ChrisPrattユーザーごとにユニークなキーでセッションを使用するとどうなりますか? –

+0

これは安全ですが、それでも同じような問題があります。情報が「キャッシュされる」期間によっては、正しい認証ステータスが返されないことがあります。一般的に言えば、サービスを介して権限を与える場合は、すべての要求を行う必要があります。あなたがキャッシュするべきではありません。 –

答えて

関連する問題