0

我有一个使用 SP Web 服务的 java/j2ee Web 应用程序,但最近 SP 站点迁移到 2013 年并部署在 cloud/office 0365 中,因为身份验证被破坏了。SP 人建议将身份验证机制更改为基于 SAML 令牌的身份验证并使用 Microsoft Azure AD。所以我将我的应用程序登上了 Azure 并收到了客户端 ID,授权我可以使用它来生成安全令牌(使用 adal4j java api)。现在我需要完成以下 2 个步骤来完成 office 0365 中的身份验证过程以访问 SP 2013 Web 服务。

  1. 获取访问令牌 cookie
  2. 获取请求摘要令牌

但无法为上述 2 个步骤找到任何基于 Java 的 API。参考下面的教程,但它与 aps/.net 相关

http://paulryan.com.au/2014/spo-remote-authentication-rest/

请帮助我提供相同的示例代码库。

感谢您的支持

4

2 回答 2

0

所以您使用了适用于 Java 的 Microsoft Azure Active Directory 身份验证库 (ADAL)

在这种情况下,请查看AAD Java 示例

您想要使用 Web API 的那些。

于 2016-03-16T19:10:50.227 回答
0

根据我的经验,我认为您可以尝试直接按照您所引用的文章一步一步地使用Apache HttpClient来构造请求。

例如,下面的代码使用HttpClientxml 正文执行 post 请求以获取安全令牌。

CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("https://login.microsoftonline.com/extSTS.srf");
String xmlBody = "...";
InputStreamEntity reqEntity = new InputStreamEntity(
                    new ByteArrayInputStream(xmlBody.getBytes(), -1, ContentType.APPLICATION_OCTET_STREAM);
            reqEntity.setChunked(true);
httpPost.addHeader("Accept", "application/json; odata=verbose")
httpPost.setEntity(reqEntity);
CloseableHttpResponse response = httpclient.execute(httppost);
String respXmlBody = EntityUtils.toString(response.getEntity());
//Parse the respXmlBody and extract the security token

您可以尝试按照上面的代码通过使用 url 的安全令牌正文执行发布请求来获取包含访问令牌的响应https://yourdomain.sharepoint.com/_forms/default.aspx?wa=wsignin1.0,并使用该代码Header[] hs = response.getHeaders("Set-Cookie");获取Set-Cookie标头数组作为访问令牌。

然后使用它们设置两个标头Cookie以获取请求摘要令牌,并解析响应正文以提取FormDigestValue作为请求摘要令牌。

于 2016-03-17T09:19:22.293 回答