当前位置: 首页 > 知识库问答 >
问题:

如何让Spring Boot和OAuth2示例使用密码授予凭据而不是默认凭据

东方和惬
2023-03-14

我正在遵循Dave Syer的基本Spring Boot OAuth2示例:https://github.com/dsyer/sparklr-boot/blob/master/src/main/java/demo/application.java

@Configuration
@ComponentScan
@EnableAutoConfiguration
@RestController
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @RequestMapping("/")
    public String home() {
        return "Hello World";
    }

    @Configuration
    @EnableResourceServer
    protected static class ResourceServer extends ResourceServerConfigurerAdapter {

        @Override
        public void configure(HttpSecurity http) throws Exception {
            // @formatter:off
            http
                // Just for laughs, apply OAuth protection to only 2 resources
                .requestMatchers().antMatchers("/","/admin/beans").and()
                .authorizeRequests()
                .anyRequest().access("#oauth2.hasScope('read')");
            // @formatter:on
        }

        @Override
        public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
            resources.resourceId("sparklr");
        }

    }

    @Configuration
    @EnableAuthorizationServer
    protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {

        @Autowired
        private AuthenticationManager authenticationManager;

        @Override
        public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
            endpoints.authenticationManager(authenticationManager);
        }

        @Override
        public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
            // @formatter:off
            clients.inMemory()
                .withClient("my-trusted-client")
                    .authorizedGrantTypes("password", "authorization_code", "refresh_token", "implicit")
                    .authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT")
                    .scopes("read", "write", "trust")
                    .resourceIds("sparklr")
                    .accessTokenValiditySeconds(60)
            .and()
                .withClient("my-client-with-registered-redirect")
                    .authorizedGrantTypes("authorization_code")
                    .authorities("ROLE_CLIENT")
                    .scopes("read", "trust")
                    .resourceIds("sparklr")
                    .redirectUris("http://anywhere?key=value")
            .and()
                .withClient("my-client-with-secret")
                    .authorizedGrantTypes("client_credentials", "password")
                    .authorities("ROLE_CLIENT")
                    .scopes("read")
                    .resourceIds("sparklr")
                    .secret("secret");
        // @formatter:on
        }

    }
}
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
protected static class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(AuthenticationManagerBuilder authManagerBuilder)
            throws Exception {
        authManagerBuilder.inMemoryAuthentication().withUser("user")
                .password("password").roles("USER");
    }
}

我错过了什么才能让它运转起来?

共有1个答案

熊锐进
2023-03-14

由于我仍然在2.0.3上,我尝试了更多的事情,这似乎是有效的:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
protected static class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder authManagerBuilder) throws Exception {
        authManagerBuilder
            .inMemoryAuthentication()
                .withUser("user1").password("password1").roles("USER").and()
                .withUser("admin1").password("password1").roles("ADMIN");
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManager() throws Exception {
        return super.authenticationManager();
    }
}

通过显式定义authenticationManager bean,内置的用户身份验证消失了,它开始依赖于我自己的InmemoryAuthentication。当2.0.4发布时,我将重新评估Dave上面发布的解决方案,因为它看起来会更优雅。

 类似资料:
  • 在AWS Xamarin SDK文档中,的Amazon Cognito Identity API文档在其第二段中指出,“必须使用AWS开发人员凭据来调用此API。” 现在,总的想法是尽量不要泄露API机密 但是上面粗体提到的这段文字是否意味着我不能使用IAM角色和/或策略来调用这些API?这是否意味着我必须在应用程序源代码中包含accessKey和secretKey? AWS提供了Cognito机

  • 我想使用Spring Security的资源服务器和我的组件中包含的授权服务器来保护我的应用程序。所需的流包括仅使用客户端凭据授予类型并将client_id与client_secret一起传递为bas64标头,在命中终结点后,应该返回令牌以用于进一步的请求。我还包括grant_type:请求参数中的客户端凭据 目前我收到错误:。奇怪的是,尽管我进行了配置,Spring仍然会生成控制台日志中可以看到

  • 我在我的springBoot应用程序中添加了H2DB,用于单元测试目的。 应用中测试。我刚刚添加的属性: Spring数据源。名称=h2db spring.h2.console.enabled=true 它工作正常,节省了价值。 但它是如何工作的,我如何浏览这个数据库?

  • 本文向大家介绍oauth 资源所有者密码凭证授予,包括了oauth 资源所有者密码凭证授予的使用技巧和注意事项,需要的朋友参考一下 示例 资源

  • 我试图使用spring OAuth2在Spring Boot服务中实现服务到服务的安全性。我希望一个服务访问另一个服务的安全资源,而不涉及任何用户操作。 我可以设置auth服务器并使用curl请求获取令牌。我发现的测试使用Http对象来检查状态代码。 如何在具有RestTemplate和spring OAuth2的java客户机中使用客户机凭据授权类型? 我想它一定像添加一个依赖项、一个注释和一个

  • 我开发Spring Cloud(使用Netflix OSS堆栈)微服务架构已经有一段时间了。正如您所料,我已经将授权服务器分离为一个独立的微服务。我的前端应用程序使用“密码”授权类型用于用户登录目的。但是,对于从前端服务到其他后端服务的rest调用,我使用的是“Client-Credentials”授权类型。客户机凭据授予类型也在其他后端服务中使用。通过这样做,我无法确定谁是请求的实际调用者(当前