11

私はSpring Boot Oauth2チュートリアルをいじっていましたが、かなり重要な要素が機能していないようです:

https://spring.io/guides/tutorials/spring-boot-oauth2/

認可サーバーとして実行したい。理解できる限り厳密に指示に従いましたが、/oauth/authorize エンドポイントに移動すると、403 Forbidden 応答しか返されません。これは、チュートリアルでセットアップされた HttpSecurity 構成を考えると、実際には理にかなっています。

protected void configure(HttpSecurity http) throws Exception {
    http
      .antMatcher("/**")
      .authorizeRequests()
        .antMatchers("/", "/login**", "/webjars/**")
        .permitAll()
      .anyRequest()
        .authenticated()
        .and().logout().logoutSuccessUrl("/").permitAll()
        .and().csrf().csrfTokenRepository(csrfTokenRepository())
        .and().addFilterAfter(csrfHeaderFilter(), CsrfFilter.class)
        .addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class);
}

このチュートリアルのログイン ページは、実際にはメイン インデックスであり、Oauth システムにログイン フローをそこにリダイレクトするように指示するチュートリアルはまったくありません。

これを追加することで、ある種の機能を得ることができます:

        .and().formLogin().loginPage("/")

...しかし、先に進む前に、これがチュートリアルの問題なのか、私の実装の問題なのか、それとも何か他の問題なのかを本当に理解したかったのです。Oauth セキュリティ システムが「ログイン」ページを決定するメカニズムは何ですか?

4

3 に答える 3

10

解決策は、SecurityConfig.configure 呼び出しに以下を追加することでした。

@Override
protected void configure(HttpSecurity http) throws Exception {
    AuthenticationEntryPoint aep = new AuthenticationEntryPoint() {

        @Override
        public void commence(HttpServletRequest request,
                HttpServletResponse response,
                AuthenticationException authException) throws IOException,
                ServletException {
            response.sendRedirect("/login");
        }
    };

    http.exceptionHandling()
            .authenticationEntryPoint(aep)

認証フローを特定の URL にリダイレクトします (この場合、「/login」に送信していますが、「/」または選択した他のものでも機能しました)。この行を明示的に追加せずにチュートリアルがリダイレクトを行う方法がわかりません。

于 2016-03-22T18:06:45.760 に答える
3

この 回答 に従ってください。1. Apache プロキシでヘッダーをセットアップする必要があります。

<VirtualHost *:443>
    ServerName www.myapp.org
    ProxyPass / http://127.0.0.1:8080/
    RequestHeader set X-Forwarded-Proto https
    RequestHeader set X-Forwarded-Port 443
    ProxyPreserveHost On
    ... (SSL directives omitted for readability)
</VirtualHost>

2. Spring Boot アプリにこれらのヘッダーを使用するように指示する必要があります。したがって、次の行を application.properties (または Spring Boots がプロパティを理解する他の場所) に追加します。

server.use-forward-headers=true
于 2016-12-09T07:04:12.837 に答える
-1

/oauth/authorize エンドポイントに直接移動する必要はありません。これは舞台裏で使用されており、index.html ページはチュートリアルでデモを行っているページです。

于 2016-03-14T00:48:47.220 に答える