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



我正在尝试构建一个批处理作业来访问Office 365邮件API。在检查文档(概念非常清楚)时,我找不到为Java编写的代码示例。我已经发现了这一点,但它依赖于java pom文件,但如果可能的话,我想直接使用REST API或Graphi API。

有人能告诉我如何开始构建一个守护服务来访问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。执行方法

HttpResponseProxy{HTTP/1.1 401 Unauthorized [Content-Type:application/json;charset=utf-8, Server: Microsoft-IIS/8.5请求id: 49ca360f-ab4b-42d5-a4b0-9676e4244c21,客户端请求id:49 ca360f ab4b - 42 - d5 a4b0 - 9676 e4244c21 x-ms-ags-diagnostic:{" ServerInfo ":{"数据中心":"西方我们"、"片":"SliceA"、"ScaleUnit":"003"、"主机":"AGSFE_IN_8"、"ADSiteName ": "失去"}},X-Powered-By: ASP。NET,日期:周二,2016年9月6日20:43:24 GMT,Content-Length: 244] ResponseEntityProxy{[Content-Type:内容类型:application/json;charset=utf-8,Content-Length: 244,Chunked: false]}}

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

(令牌与此类似,只是为了安全起见将其更改为类似的内容)

Java演练在这里(尽管对于使用验证代码流的web应用程序):https://dev.outlook.com/restapi/tutorial/java

还有这个使用客户端凭证流的示例:

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

要在守护程序或服务应用程序中进行身份验证,我们可以使用Client Credentials流。在我们注册应用程序之后,我们将获得secret。然后我们可以使用下面的请求直接获取仅限应用的访问令牌:

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。这是一个关于在服务或守护程序应用程序中调用microsoftgraph的详细文档。

相关内容

  • 没有找到相关文章

最新更新