使用Azure Active Directory作为Spring-boot REST服务的OAUTH2身份验证服务

时间:2015-09-16 12:01:11

标签: java spring rest azure

我正在尝试实现基于Spring-boot的REST服务,该服务应该使用Azure AD作为OAuth2服务器进行客户端身份验证。

我注册了两个应用程序:

  1. 用作我的服务客户端的移动原生应用
  2. 作为后端的休息服务。
  3. 对后端应用程序的所有请求都应通过Azure AD进行身份验证 使用OAuth2流程。

    作为移动应用的实现,我正在使用curl:

    为了获得Bearer令牌,我使用https://login.microsoftonline.com/TENANT_ID/oauth2/token

    curl -s -X POST https://login.microsoftonline.com/<TENANT_ID>/oauth2/token -d grant_type=password -d username=$USER_NAME -d password=$PASSWORD -d resource=$RESOURCE_ID -d client_id=$CLIENT_ID
    

    其中$ USER_NAME和$ PASSWORD是Azure AD用户的凭据,$ RESOURCE_ID是我的REST服务的SID,$ CLIENT_ID是我的移动客户端的SID,用于REST服务。

    Azure使用令牌数据成功返回JSON。

    我的后端应用程序的Oauth2配置:

    @Configuration
    @EnableResourceServer
    public class OAuth2Config extends ResourceServerConfigurerAdapter {
     @Bean
        ResourceServerTokenServices resourceTokenServices() {
            RemoteTokenServices tokenServices = new RemoteTokenServices();
            tokenServices.setClientId(resourceId);
            tokenServices.setClientSecret(/*I do not have it*/resourcePassword);
            tokenServices.setCheckTokenEndpointUrl(/*I do not have it*/checkToken);
            return tokenServices;
        }
    
    @Override
        public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
            resources.tokenServices(resourceTokenServices());
            resources.resourceId("rest_api");
        }
    
    @Override
        public void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().antMatchers("/**").authenticated();
        }
    }
    

    我的REST控制器:

    @RestController
    @RequestMapping("/data")
    public class CustomerRestController {
    
        @RequestMapping(method = RequestMethod.GET)
        public SomeData getMyData(Principal principal){
            System.out.println("RESOURCE WAS REQUESTED BY " + principal.getName());
            return new SomeData(principal.getName());
        }
    }
    

    但是我没有在端点列表中找到我的REST服务可用于检查持票人令牌和从Azure AD获取用户数据的任何URL。 此外,据我所知,它应该为我的REST服务提供某种凭据以使用Azure AD

    如何找到所需的值或我走错了路?

1 个答案:

答案 0 :(得分:4)

最后,我得到了答案。

Azure AD使用JWT令牌进行授权,因此我必须使用此类令牌实现工作,而不是检查服务器上的令牌。