Spring Security OAuth2の例はたくさんあるようですが、そのほとんどは特定のポートのセットでlocalhostで実行されます。 AuthorizationServerとResourceServerに指定されたポートでアプリケーションを動作させることができました。私が取る必要があった次のステップは、このアプリケーションをプロキシサーバーの背後に移動することでしたが、アプリケーションが機能しなくなりました。主な問題はパスに関連しているようですが、私はOAuth2 Springをプロキシサーバーの背後に移動するタスクをどのように達成するかについての例がないことに苦労しています。私はWhitelabelApprovalEndpointをオーバーライドすることに重点を置いてきましたが、これが必要なのかどうかはわかりません。春のセキュリティOAuth2の背後にあるProxy Server
私は、WhiteLabelApprovalEndpointとほとんど同じコントローラを作成できましたが、プロキシの背後にあるように調整する方法はわかりません。
@Controller
@SessionAttributes("authorizationRequest")
public class ApprovalEndpoint {
@RequestMapping("/oauth/confirm_access")
...
private static String TEMPLATE = "<html><body><h1>OAuth Approval</h1>"
+ "<p>Do you authorize '${authorizationRequest.clientId}' to access your protected resources?</p>"
+ "<form id='confirmationForm' name='confirmationForm' action='authorize' method='post'><input name='user_oauth_approval' value='true' type='hidden'/>%csrf%%scopes%<label><input name='authorize' value='Authorize' type='submit'/></label></form>"
+ "%denial%</body></html>";
...
私はクラスに作られた唯一の変化は
action='authorize'
これは、POSTが行くことを可能にすると
action='${path}/oauth/authorize'
を置き換えることにより、相対パスを作り、フォームアクション文字列を更新することでした正しいURLに
http://localhost/proxy/stuff/javaPath/oauth/authorize
の代わりに
http://javaPath/oauth/authorize
Apache(フロントエンドプロキシ)から送信された場合、後者はマップされません。しかし、私がauthorizationRequestがnullの場合は、この例外がAuthorizationEndpointでスローされていることがわかりエラー
error="invalid_request", error_description="Cannot approve uninitialized authorization request."
につながるので、これは、Javaアプリケーション内の他の問題を作成することと思われます。これは、SessionAttributesが正しく設定されている私のカスタムクラスで処理する必要があるように見えますが、私がPOSTしているパスを更新するとこれを破るようです。