2016-09-20 31 views
0

Nginxの前でマルチテナントシステムを構築しています。マルチテナントシステムでJWTと外部認証サーバーを使用するNginx認証

Nginxが有効なJWTを持っているかどうかを確認するために、まずNginxにすべてのリクエストを「フィルタリング」したいと思っています。そうでなければ、SAML/SSOを行い、JWTまたは「偽」を返す外部認証サーバに「コールアウト」する必要があります。 falseの場合、401が返されます。

有効なJWTがある場合は、それを解釈してテナント名を抽出する必要があります。次に、要求パスに応じて、正しいテナントを含むようにurl/POST本体を修正する必要があります(Elasticsearchを使用しており、テナントが独自のインデックスのみを照会できるようにする必要があります)

認証サーバはphpで構築されるので、必要なものは「フィルタ」部分と認証サーバを呼び出す有効な方法です。この要件を解決する既製のnginxモジュールはありますか?それともルアはここで最善の賭けですか?私は比較的初心者のNginx-erです。

答えて

1

https://github.com/auth0/nginx-jwtを使用してください。私は手動でluaモジュールをnginxにインストールする時間があまりなく、すべての依存関係があるため、Openrestyをインストールする方が簡単でした。

行114でhttps://github.com/auth0/nginx-jwt/blob/master/nginx-jwt.luaにあるライブラリは、Idでなければならないヘッダーにサブを追加します。必要な場合は、これを変更することができます。

ngx.header["X-Auth-UserId"] = jwt_obj.payload.sub

1

nginxのためのより良いとシンプルなJWTベースの認証モジュールがあります。 高度に設定可能です。 https://github.com/tarachandverma/nginx-openidc

複数の依拠当事者を設定できます。リンクが壊れる可能性として https://github.com/tarachandverma/nginx-openidc/blob/master/test-conf/oidc-config.xml#L12

<!-- relying parties configuration --> 
<relyingParties default="282412598309-545pvmsh9r23f4k1o7267744s59sod6v.apps.googleusercontent.com"> 
    <relyingParty clientID="282412598309-545pvmsh9r23f4k1o7267744s59sod6v.apps.googleusercontent.com" clientSecret="xxxxx" domain=".com" validateNonce="true"> 
     <description>nginx oidc demo</description> 
     <redirectUri>http://ngx-oidc-demo.com/oauth2/callback</redirectUri> 
    </relyingParty> 
</relyingParties> 
+0

は、唯一の答えのリンクを投稿しないでください。関連するコンテンツをリンクから取り出し、ここに投稿してください。 – Milk