2015-09-16 21 views
5

Tôi đang cố triển khai dịch vụ REST dựa trên khởi động mùa xuân, sử dụng Azure AD làm máy chủ OAuth2 để xác thực ứng dụng khách.Sử dụng Azure Active Directory làm dịch vụ xác thực OAUTH2 cho dịch vụ REST khởi động Spring

Tôi đã đăng ký hai applicatons:

  1. thoại di động ứng dụng có nguồn gốc được sử dụng như một khách hàng cho dịch vụ của tôi
  2. Rest-dịch vụ như một hậu phương.

Tất cả yêu cầu cho ứng dụng phụ trợ phải được xác thực thông qua Azure AD bằng cách sử dụng luồng OAuth2.

Là một thực hiện của ứng dụng di động Tôi đang sử dụng curl:

Đối với việc thu thập một mã thông báo Bearer tôi sử dụng 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 

nơi $ USER_NAME và $ PASSWORD là credetials của một Azure dùng AD, $ RESOURCE_ID là một SID của dịch vụ REST của tôi và $ CLIENT_ID là một SID của ứng dụng di động của tôi cho REST serice.

Azure trả về thành công JSON với dữ liệu mã thông báo.

My OAuth2 Config cho Backend ứng dụng:

@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(); 
    } 
} 

khiển REST của tôi:

@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()); 
    } 
} 

Nhưng tôi không tìm thấy trong danh sách thiết bị đầu cuối bất kỳ URL có thể được sử dụng bởi các dịch vụ REST của tôi cho kiểm tra mã thông báo mang và lấy dữ liệu người dùng từ Azure AD. Ngoài ra, như tôi hiểu, cần có một số thông tin xác thực cho dịch vụ REST của tôi để sử dụng Azure AD

Làm cách nào để tìm các giá trị bắt buộc hoặc tôi đang đi sai?

+0

Mã Java đó có trong mẫu của bạn không? –

+1

@ShaunLuttin có, đó là mã Java – Serg

+0

Tài liệu này có thể giúp bạn https://azure.microsoft.com/en-us/documentation/articles/active-directory-authentication-scenarios/ –

Trả lời

4

Cuối cùng tôi có câu trả lời.

Azure AD sử dụng mã thông báo JWT để ủy quyền, vì vậy tôi phải triển khai công việc với loại mã thông báo này thay vì kiểm tra mã thông báo trên máy chủ.

+3

bạn có thể vui lòng chia sẻ việc triển khai mã không cho điều này. –

+0

Bạn có thể cho chúng tôi thấy một số đoạn mã không? Tôi đang cố gắng để thực hiện một giải pháp như thế, mà không cần sử dụng Azure AD, nhưng tôi nghĩ rằng phần JWT phải giống nhau – Teo

Các vấn đề liên quan