Spring OAUTH2用于角度Web应用程序

时间:2015-09-28 01:18:25

标签: oauth-2.0 spring-security-oauth2

我正在尝试为Web应用程序实现OAUTH2,并且需要一个简单的OAUTH2设置来保护其他API。其中一个API提供登录功能,其中验证用户凭证(用户名/密码)。我的用例如下:
  1. API的客户端现在是AngularJS,但将来可能还有其他客户端   2.用户使用用户名和密码登录应用程序,即用于呼叫登录休息服务的UI层(角度),并且在成功验证时生成具有到期时间的访问令牌。
  3.客户端使用此生成的访问令牌来使用应用程序中的其他API

请为上述用例建议一个简单的OAUTH2配置?

1 个答案:

答案 0 :(得分:0)

Spring OAuth2带有内置端点,通过API Resource Owner Password Grant获取access_token

这是一个简单的配置

@Configuration
public class OAuth2ServerConfiguration {

    private static final String RESOURCE_ID = "tonywebapp-restservice";

    @Configuration
    @EnableAuthorizationServer
    protected static class AuthorizationServerConfiguration extends
        AuthorizationServerConfigurerAdapter {

        @Autowired
        @Qualifier("authenticationManagerBean")
        private AuthenticationManager authenticationManager;

        @Autowired
        private UserApprovalHandler userApprovalHandler;

        @Override
        public void configure(AuthorizationServerEndpointsConfigurer endpoints)
                throws Exception {

            endpoints
                    .tokenStore(tokenStore())
                    .userApprovalHandler(userApprovalHandler)
                    .authenticationManager(authenticationManager)
                    .pathMapping("/oauth/error", "/oauth/error.html")
                    .pathMapping("/oauth/confirm_access", "/oauth/confirm_access.html")
                    ;

        }

        @Override
        public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
            clients
                .inMemory()
                    .withClient("your_client_id_here")
                        .resourceIds(RESOURCE_ID)
                        .authorizedGrantTypes("password", "refresh_token")
                        .authorities("USER")
                        .scopes("read.some.thing", "write.some.thing", "any.thing.you.want")
                        .resourceIds(RESOURCE_ID)
                        .secret("your_secret_here");
        }

        @Bean
        @Primary
        public DefaultTokenServices tokenServices() {
            DefaultTokenServices tokenServices = new DefaultTokenServices();
            tokenServices.setSupportRefreshToken(true);
            tokenServices.setTokenStore(tokenStore ());
            return tokenServices;
        }

        @Bean
        public TokenStore tokenStore() {
            return new InMemoryTokenStore();
        }

    }

}

但是,建议不要将此授权用于网络应用。因为你不能保护你的secret。我正在为我的AngularJS网络应用程序使用implicit授权类型。