2017-06-26 17 views
1

私のJSF/TomEEアプリケーションでは、ユーザがリソース(基本的にurlパラメータのID)にアクセスする方法を指定するユーザとロールを持つNoSQLデータベースが読み取り専用または書き込みのいずれかになっています。Shiroとクライアント証明書

私はセキュリティとthis post gave me some ideasを実装したいと思いますが、おそらくShiroまたはPicketLinkというサードパーティのライブラリを試してみたいと思います。このルールでは、ユーザーがクライアント証明書で認証され、提供されない場合は、デフォルトのゲストユーザーとして認証されます。

驚いたことに、私は城でこれを行う方法についていくつかの情報を見つけるのが面倒です。それはまっすぐに見えません。 Shiroのクライアント証明書認証を実装するための「すぐに使える」ものは何もないことは驚きです。

だから私はデータベースとシロを "接続"するためにレルムを作らなければならないと思います。それから私はorg.apache.shiro.authc.UsernamePasswordTokenを拡張して証明書を読み、それを城に渡す必要があるかもしれないと読んだ。次に、JSF xhtmlページ(たとえばrendered属性を使用して)のコンテンツへのアクセスを制限する必要があるとします。NamedマネージドBeanのすべてのメソッドでも、アクセス権をチェックする必要があります。

また、証明書が提供されていないときにどのようにゲストユーザを割り当てることができないのかは明らかではありません。なぜなら、証明書が提供されていなければ、ゲストユーザーを割り当てるために実行されます。私はTomEEで2つの異なるポートを開くことができましたが、ゲストのユーザをシステム内の他のユーザと同じように扱いたいので、アクセスは統一されません。これはどうすればできますか?

これはPicketLinkで簡単に実装されていますか? (これはJSFの方が優れています)

答えて

1

[OK]をしばらくの間、多くの研究が必要でしたので、私の所見を劇的に要約します。私はすべてを文書化しましたが、本の章を作成したくありません。

私は城と一緒に行くことに決めました。私が描いたことはすべてうまくいっています。 This X509certificate project for Shiroは非常に便利でした。基本的には、2つのメソッド(認証と認可の両方)をオーバーライドする領域を実装する必要があります。前に述べたコードで拡張するクラスがあります。

Shiroフィルタでは、証明書を提供していないユーザーを特定することができます。したがって、トークン(証明書)が提供されていない場合は、オンザフライで作成することも、キーストアから読み取ることもできます。

JSFでのアクセスを制限するには、助けることができるいくつかのshiroタグがあります。renderedを使用する必要はありません。私は、Beanやデータベースにアクセスする他のクラスでも権限をチェックしています。これは、許可メソッドで権限が確立された後に機能します。

<Connector port="..." ClientAuth="want" ...を使ってTomcatの問題を解決すると、証明書を要求されますが、証明書が提供されていなければユーザーは停止しません。

関連する問題