使用Java中的Office 365 REST API构建守护程序或服务应用程序

时间:2016-08-31 20:24:32

标签: java office365 daemon azure-active-directory outlook-restapi

我正在尝试构建一个批处理作业来访问Office 365 Mail API。在检查documentation(概念非常清楚)时,我无法找到为Java编写的代码示例。我找到this但它依赖于java pom文件,但如果可能的话,我希望直接使用REST API或Graphi API。

有人可以指点我如何开始构建一个Daemon服务来访问Office 365 REST API而无需用户登录吗?

更新

我使用以下代码来使用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();
        }


    }

此处来自http.execute方法的未授权错误

  

HttpResponseProxy {HTTP / 1.1 401 Unauthorized [内容类型:   应用/ JSON; charset = utf-8,服务器:Microsoft-IIS / 8.5,   request-id:49ca360f-ab4b-42d5-a4b0-9676e4244c21,client-request-id:   49ca360f-ab4b-42d5-a4b0-9676e4244c21,x-ms-ags-diagnostic:   { “ServerInfo”:{ “数据中心”:“西   美国”, “切片”: “SliceA”, “ScaleUnit”: “003”, “主机”: “AGSFE_IN_8”, “ADSiteName”: “WST”},   X-Powered-By:ASP.NET,日期:星期二,2016年9月6日20:43:24 GMT,   Content-Length:244] ResponseEntityProxy {[Content-Type:   应用/ JSON; charset = utf-8,Content-Length:244,Chunked:false]}}

     

eyJ0eXAiOiJKV1QiLCJxcy76FRUlljRV9tb3RXVkpLSHJ3TEJiZF85cyIsImtpZCI6IlliUkFRUlljRV9tb3RXVkpLSHJ3TEJiZF85cyJ9.eyJhdWdfsas32sub2ZmaWNlMzY1LmNvbSIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0L2YwMjYzMzUzLWFlYjItNGE4YS1iZThhLTc3Mzc3MmE2MGJlMy8iLCJpYXQiOjE0NzMxOTQ4MjIsIm5iZiI6MTQ3MzE5NDgyMiwiZXhwIjoxNDczMTk4NzIyLCJhcHBpZCI6IjhhNjc2ZjJkLWU1M2MtNDViNy05MzhhLTdiOTE1YjVkZTRiNiIsImFwcGlkYWNyIjoiMasdff4577dHMud2luZG93cy5uZXQvZjAyNjMzNTMtYWViMi00YThhLWJlOGEtNzczNzcyYTYwYmUzLyIsIm9pZCI6IjQ3NDhkZDE5LTAxOTUtNDcwOC04MTNkLTQxMTdhNDhlMTdmOCIsInN1YiI6IjQ3NDhkZDE5LTAxOTUtNDcwOC04MTNkLTQxMTdhNDhlMTdmOCIsInRpZCI6ImYwMjYzMzUzLWFlYjItNGE4YS1iZThhLTc3Mzc3MmE2MGJlMyIsInZlciI6IjEuMCJ9.BKt54345DIfv2WWT4pQ - Nuy-0aHkkht4332r7E4d5mP-EAEKmcQe7y0IPjkYGZTNhyNiG2tVAyb56Gcbessdsfewz_BNoAolTVukxttXc-pFY1_Ol5Adc8T5yio43ixfs88mrVRqZEHsb7c-WJO-otBXocZs8waYXdree83g1JtcnULs7bAGp3VBUhMjuJ2u87363Yq3lfse39_Pt6tRw]

(令牌与此类似,只是将其更改为类似的安全性)

2 个答案:

答案 0 :(得分:2)

这里的Java演练(虽然对于使用身份验证代码流的Web应用程序):https://dev.outlook.com/restapi/tutorial/java

还有一个使用客户端凭据流的示例:

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

答案 1 :(得分: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

要使用Office 365访问令牌,我们可以使用https://outlook.office.com替换资源。 Here是有关在服务或守护程序应用程序中调用Microsoft Graph的详细文档。