0

のために私はUser.IsInRoleは、ワンアクションで失敗したが、別の

if (!this.Roles.Split(',').Any(filterContext.HttpContext.User.IsInRole))

をして、私のMVCアプリケーションへのカスタムAUTHORIZE属性を入れてきたし、本当ならば、それは不正にリダイレクトされますありません。

コントローラのレベルでこの属性をコントローラに配置しました。

1つのアクションは正常に動作し、1つのアクションでは私は不正になります。

ロールシステムにいくつかのバグや問題はありますか?私はログアウトして読み込んだり、いくつかのキャッシュをリフレッシュしたり強制したりすることができますが、私が使用しているシステムはあなたのドメイン資格情報で認証されているので、ログアウトする方法はありません。

私は、アプリケーションプールを再起動してセッションクッキーを削除しようとしましたが、何も機能しませんでした。

この特定の問題を経験したことがありましたか、キャッシュに関する問題が発生していると思われる人はいましたか?

ETA:システム上の別のユーザーがコントローラに必要な役割を果たし、両方のアクションが彼にとってうまく機能します。だから、おそらく私のユーザーはどうにかして盗聴されます。これはUAT上でローカルマシン上で実行するよりも少し難しい(これはうまくいく)。

ETA2:これはキャッシングの問題で、URLには?1 = 1というクエリ文字列が付いているので、動作します。私はキャッシュを無効にすることはできません。これは、今後人に役割を割り当てるときに問題になる可能性があります。

答えて

1

最初に、より明確な回答を得るために、より多くのコードが必要です。しかし:

  1. キャッシュ問題である可能性があります。 OutputCacheなどを使用している場合は、VaryByCustomを使用していることを確認して、返されたカスタム文字列にユーザーのIDや他の識別トークンを何らかの形で含める必要があります。

    ユーザーにロールを追加する場合は、ユーザーをログアウトしてサインインし直すか、承認を無効にする必要があります。たとえば、アイデンティティでは、セキュリティスタンプを無効にするだけで、ユーザーが再認証され、ログインしてから変更された主張や役割などが更新されます。

+0

かなり確かです(2)セキュリティトークンに対して単にURLをキャッシュしているだけです。これはMVCの役割システムの内部にあるため、これ以上コードを投稿することはできません。私は、この問題を解決するためにユーザーを無効にして再検証する方法を見つける必要があると思います。私はアプリプールを無効にしてもクリアされないので、キャッシュがどこに保存されているか知りたいのです。レガシーコードに私は行く... – NibblyPig

関連する問題