These are chat archives for spring-cloud/spring-cloud

19th
Nov 2018
王滕辉
@514840279
Nov 19 2018 07:33
when i use seculity serve uri login it's ok,but use client uri it doesn't word , seculity redirectUris is not useful
doesn't work
zhangyanwei
@zhangyanwei
Nov 19 2018 07:34
@514840279 遇到什么问题了?
王滕辉
@514840279
Nov 19 2018 07:35
sso 登录时 无法 回调到 之前的 地址
zhangyanwei
@zhangyanwei
Nov 19 2018 07:35
出现什么样的错误?
王滕辉
@514840279
Nov 19 2018 07:36
不断重定向到登录页面,没有见到有效的错误提示
image.png
zhangyanwei
@zhangyanwei
Nov 19 2018 07:39
那就说明,从认证服务器重定向到你的资源服务器时,资源服务器没有做正确的处理,而是认为是一个没有认证的访问,就再次将请求重定向到认证服务器,而之后的认证服务器认为你应该认证过了,就不再显示认证页面,而是将请求转向之前的服务。如此反复....
多数情况下,你需要配置 HttpSecurity
王滕辉
@514840279
Nov 19 2018 07:45
我WebSecurity 也配了,不知道有没有错误
    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory() // 使用in-memory存储客户端信息
                .withClient("wth")// 客户端ID
                .secret("wth") // 客户端连接
                .autoApprove("true") // 自动确认授权不展示页面
                .authorizedGrantTypes("password", "refresh_token", "authorization_code")// 设置验证方式
                .scopes("all")// 允许的授权范围
                .redirectUris("http://localhost:82/index")//
                .accessTokenValiditySeconds(10000) // token过期时间
                .refreshTokenValiditySeconds(10000); // refresh过期时间
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.tokenStore(tokenStore).accessTokenConverter(jwtAccessTokenConverter).authenticationManager(authenticationManager);

//        .userDetailsService(userService); // 配置userService 这样每次认证的时候会去检验用户是否锁定,有效等
    }

    /**
     * 方法名 : configure
     * 功 能 : TODO(这里用一句话描述这个方法的作用)
     * 参 数 : @param security
     * 参 数 : @throws Exception
     * 参 考 : @see org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter#configure(org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer)
     * 作 者 : Administrator
     */

    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security.tokenKeyAccess("isAuthenticated()");
    }
zhangyanwei
@zhangyanwei
Nov 19 2018 07:46
protected void configure(HttpSecurity http) throws Exception {
    http
        .requestMatchers()
            .regexMatchers("^/(?:oauth/authorize|(?!(?:oauth|actuator|management|users)/)).*")
            .and()
        .authorizeRequests()
            ....
}
例如上面这样, 你需要将 /oauth/authorize (在AuthorizationEndpoint中定义),排除在外,或使其 permitAll
王滕辉
@514840279
Nov 19 2018 07:47
就是 这个

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 允许所有用户访问"/"和"/home"
        http.csrf().disable().authorizeRequests()
                // 不需要验证就可以访问的路径
                .antMatchers("/dist/*/**", "/info", "/plugins/*/**", "/oauth/**", "/login**", "*/*/index").permitAll()
                // 限制所有请求都需要验证
                .anyRequest().authenticated().and().formLogin()
                // 登录页
                .loginPage("/login").failureUrl("/login?error").permitAll().and().logout().permitAll().and().httpBasic();
    }
我有一个的,authorize没加
zhangyanwei
@zhangyanwei
Nov 19 2018 07:55

刚才发的是认证服务端的配置,从你描述的现象看,你的设置应该是没有问题的。
下面是资源服务器的配置。

  1. 在 HTTP Basic 认证前添加 OAuth2ClientAuthenticationProcessingFilter

     protected void configure(HttpSecurity http) throws Exception {
         http
                 .addFilterBefore(authenticationFilter(), BasicAuthenticationFilter.class)
  2. OAuth2ClientAuthenticationProcessingFilter 的定义

     private Filter authenticationFilter() {
         // 这里配置的 URL 就是认证服务认证后回调的地址
         OAuth2ClientAuthenticationProcessingFilter authFilter = new OAuth2ClientAuthenticationProcessingFilter("/authenticate");
         // 在这里配置客户端信息
         OAuth2RestTemplate template = new OAuth2RestTemplate(configuration.getClient(), oauth2ClientContext);
         authFilter.setRestTemplate(template);
         ... other configuration ...
         return authFilter;
     }
  3. 上面的第2步自动设置了 AntPathRequestMatcher, 详细见 AbstractAuthenticationProcessingFilter

zhangyanwei
@zhangyanwei
Nov 19 2018 08:03
如果不清楚详细的流程的话,可以看看 oauth2.0 的 Authentication Code Flow 的描述。
Spring Security OAuth 的实现基本是遵循这个做的,规范中没有描述的地方,可以查看源代码,可从 AbstractAuthenticationProcessingFilter#doFilter 开始 debug 看它的处理流程。
王滕辉
@514840279
Nov 19 2018 08:04
OK ,thanks ,我先研究一下,
zhangyanwei
@zhangyanwei
Nov 19 2018 08:05
@514840279 Good Luck
Olga Maciaszek-Sharma
@OlgaMaciaszek
Nov 19 2018 09:43
@514840279 @zhangyanwei The language of this channel is English. Please do all the discussions in this gitter channel in English only. Otherwise, you can talk privately in other languages
zhangyanwei
@zhangyanwei
Nov 19 2018 09:45
@OlgaMaciaszek got it, I'll ...
Spencer Gibb
@spencergibb
Nov 19 2018 13:59
@sharmasourabh Greenwich will be 2.1.0 compatible and java 11
scalderwoodsolstice
@scalderwoodsolstice
Nov 19 2018 20:27
@spencergibb Apologies if this has been answered. Any update on when Greenwich will be released?
scalderwoodsolstice
@scalderwoodsolstice
Nov 19 2018 23:00
Nice! Thanks for the update.