2

Office 365 Mail API에 액세스하기위한 일괄 처리 작업을 작성하려고합니다. documentation (개념은 매우 명확합니다)을 확인하면서 Java 용으로 작성된 코드 샘플을 찾을 수 없었습니다. this을 찾았지만 java pom 파일을 사용하지만 가능한 경우 REST API 또는 Graphi API를 직접 사용하고 싶습니다.Java에서 Office 365 REST API로 데몬 또는 서비스 응용 프로그램 만들기

사용자가 로그인하지 않고도 Office 365 REST API에 액세스 할 수있는 데몬 서비스를 만드는 방법을 알려줄 수 있습니까?

UPDATE

I했습니다 다음 코드는 http.execute 방법에서 여기 AADL 라이브러리

String tenant="...."; 
     String authority = "https://login.windows.net/"+tenant+"/oauth2/authorize"; 
     ExecutorService service=null; 
     service= Executors.newFixedThreadPool(1); 

     try{ 

      AuthenticationContext authenticationContext= new AuthenticationContext(authority,false,service); 
      String certFile="/mycert2.pfx"; 
      InputStream pkcs12Cert= new SharedFileInputStream(certFile); 

      AsymmetricKeyCredential credential=AsymmetricKeyCredential.create("....",pkcs12Cert,"pass"); 


      Future<AuthenticationResult> future=authenticationContext.acquireToken("https://outlook.office365.com",credential,null); 

      System.out.println("Token Received"+future.get().getAccessToken()); 
      String token = future.get().getAccessToken(); 

      HttpGet httpGet = new  HttpGet("https://graph.microsoft.com/v1.0/users"); 

      httpGet.setHeader("Authorization", "Bearer "+token); 


      GraphServices graphServices = new GraphServices(); 
      ResponseEntity<String> responseEntity; 


      //responseEntity = graphServices.getEmails(token); //Throws the same Unauthorized exception 

      HttpClient httpClient= HttpClients.createDefault(); 

      HttpResponse response=httpClient.execute(httpGet); 
//response contains Unauthorized access 
      HttpEntity entity=response.getEntity(); 

     } 
     catch (MalformedURLException e){ 
      e.printStackTrace(); 

     } 
     catch (Exception e){ 
      e.printStackTrace(); 
     } 


    } 

에게 허가되지 않은 오류를 사용하여 토큰을 얻을 수

HttpResponseProxy {HTTP /1.1 401 Unauthorized [Content-Type : application/json]; charset = utf-8, 서버 : Microsoft-IIS/8.5, 요청 ID : 49ca360f-ab4b-42d5-a4b0-9676e4244c21, 클라이언트 요청 아이디 : 49ca360f-ab4b-42d5-a4b0-9676e4244c21, x-ms- AGSFE_IN_8 ","ADSiteName ":"SliceA ","ScaleUnit ":"003 ","Host ":" WST "}}, X-Powered-By : ASP.NET, 날짜 : 2014 년 9 월 6 일 20:43:24 GMT, 콘텐츠 길이 : 244] ResponseEntityProxy {[콘텐츠 유형 : application/json] 캐릭터 = UTF-8, 콘텐츠 길이 : 244 청크 : FALSE]}}

eyJ0eXAiOiJKV1QiLCJxcy76FRUlljRV9tb3RXVkpLSHJ3TEJiZF85cyIsImtpZCI6IlliUkFRUlljRV9tb3RXVkpLSHJ3TEJiZF85cyJ9.eyJhdWdfsas32sub2ZmaWNlMzY1LmNvbSIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0L2YwMjYzMzUzLWFlYjItNGE4YS1iZThhLTc3Mzc3MmE2MGJlMy8iLCJpYXQiOjE0NzMxOTQ4MjIsIm5iZiI6MTQ3MzE5NDgyMiwiZXhwIjoxNDczMTk4NzIyLCJhcHBpZCI6IjhhNjc2ZjJkLWU1M2MtNDViNy05MzhhLTdiOTE1YjVkZTRiNiIsImFwcGlkYWNyIjoiMasdff4577dHMud2luZG93cy5uZXQvZjAyNjMzNTMtYWViMi00YThhLWJlOGEtNzczNzcyYTYwYmUzLyIsIm9pZCI6IjQ3NDhkZDE5LTAxOTUtNDcwOC04MTNkLTQxMTdhNDhlMTdmOCIsInN1YiI6IjQ3NDhkZDE5LTAxOTUtNDcwOC04MTNkLTQxMTdhNDhlMTdmOCIsInRpZCI6ImYwMjYzMzUzLWFlYjItNGE4YS1iZThhLTc3Mzc3MmE2MGJlMyIsInZlciI6IjEuMCJ9.BKt54345DIfv2WWT4pQ - NUY-0aHkkht4332r7E4d5mP-EAEKmcQe7y0IPjkYGZTNhyNiG2tVAyb56Gcbessdsfewz_BNoAolTVukxttXc-pFY1_Ol5Adc8T5yio43ixfs88mrVRqZEHsb7c-wjO-otBXocZs8waYXdre e83g1JtcnULs7bAGp3VBUhMjuJ2u87363Yq3lfse39_Pt6tRw]

답변

2
여기

자바 연습 (하지만 인증 코드 흐름을 사용하여 웹 응용 프로그램 용) : https://dev.outlook.com/restapi/tutorial/java

클라이언트 자격 증명 흐름을 사용하여이 샘플도 있습니다 :

https://github.com/jasonjoh/java-calendar-demo

+0

두 가지 모두 로그인 UI로 사용자를 인증하는 용도로 사용됩니다. 우리는 백그라운드 서비스를 구축하고 있으며 이는 우리에게는 도움이되지 않지만 도움을 주셔서 감사합니다. – WowBow

+1

관리자가 처음으로 앱에 동의하는 경우에만 인증이 필요합니다. 초기 동의가 제공된 후에 해당 부분을 건너 뛸 수 있습니다. –

+0

은 적어도 한 번 사용자 상호 작용없이 앱 자격증 명을 부여하지 않는다는 것을 의미합니까? 내가 Azure 측의 설정이 완료되면 앱에 자격 증명이 주어질 것이라고 생각했습니다. 나는 앱에서 사용자 상호 작용이있을 거라 생각하지 않았다. – WowBow

1

는 데몬 또는 서비스 응용 프로그램에 인증하기 위해 우리가 클라이언트 자격 증명 흐름을 사용할 수 있습니다 (토큰은 보안을 위해 비슷한에 변경이 비슷한입니다). 앱을 등록하면 의 비밀이 표시됩니다. 그런 다음 우리는 응용 프로그램 전용 액세스 토큰을 얻기 위해 직접 아래의 요청을 사용할 수 있습니다

POST https://login.microsoftonline.com/<tenantId>/oauth2/token HTTP/1.1 
Content-Type: application/x-www-form-urlencoded 

grant_type=client_credentials 
&client_id=<clientId> 
&client_secret=<clientSecret> 
&resource=https://graph.microsoft.com 

을 그리고 오피스 365 액세스 토큰을 사용하여, 우리는 https://outlook.office.com과 자원을 대체 할 수 있습니다. Here은 서비스 또는 데몬 응용 프로그램에서 Microsoft Graph를 호출하는 방법에 대한 세부 정보 문서입니다.

+1

내가 토큰을 얻을 수 있었지만 그래프 서비스를 사용하여 이메일을 얻었을 때 이미 필요한 모든 권한을 애플리케이션에 부여했지만 401 (Unauthorized)을받습니다. – WowBow

+0

[here] (https://jwt.io/)를 통해 토큰을 구문 분석하여 토큰에 대한 세부 정보를 확인할 수 있습니다. 토큰에서 ** aud ** 주장은 무엇이며 작성한 요청은 무엇입니까? –

+0

권한없는 예외를 throw하는 코드를 업데이트했습니다. 어떤 아이디어? future.get()을 가정 할 때 JWT를 사용하지 않습니다. getAccessToken(); 그래프 API 또는 HTTP 요청 중 하나를 보내야하는 액세스 토큰을 다시 제공합니다. – WowBow