1

嗨,我是一名Java开发人员。我有一个要求,即在MS Dynamics中使用WebApi创建平稳的服务,并使用Java创建一个客户端,并打到MS Dynamics Web服务。如果我想通过WebApi在MS Dynamics中创建一个宁静的服务,是否必须实现OAuth?无需身份验证就可以创建服务并从Java中启动?我的另一个问题是,是否可以使用我们的自定义身份验证方法,如调用MS Dynamics的另一个Web服务并进行验证,以及授权用户是否发送数据。MS Dynamics的Restful服务

请指导我。我在实现Java客户端时没问题,但我对MS Dynamics不熟悉,无法从网上找到任何帮助。

回答

1

下面是从贾森拉蒂摩尔的博客文章的例子:CRM Web API Using Java

同样我们在微软的朋友帮助我们在认证前 通过提供Java版在Azure Active Directory验证 库(ADAL)的。您可以设置在这里的 信息Maven的依赖性: http://mvnrepository.com/artifact/com.microsoft.azure/adal4j

在这种情况下,我使用的身份验证一个硬编码的用户名和密码 。

//Azure Application Client ID 
private final static String CLIENT_ID = "00000000-0000-0000-0000-000000000000"; 
//CRM URL 
private final static String RESOURCE = "https://org.crm.dynamics.com"; 
//O365 credentials for authentication w/o login prompt 
private final static String USERNAME = "[email protected]"; 
private final static String PASSWORD = "password"; 
//Azure Directory OAUTH 2.0 AUTHORIZATION ENDPOINT 
private final static String AUTHORITY = 
    "https://login.microsoftonline.com/00000000-0000-0000-0000-000000000000"; 

AuthenticationContext context = null; 
AuthenticationResult result = null; 
ExecutorService service = null; 
try { 
    service = Executors.newFixedThreadPool(1); 
    context = new AuthenticationContext(AUTHORITY, false, service); 
    Future<AuthenticationResult> future = context.acquireToken(RESOURCE, 
      CLIENT_ID, 
      USERNAME, 
      PASSWORD, null); 
    result = future.get(); 
} finally { 
    service.shutdown(); 
} 

String token = result.getAccessToken(); 

我偶然发现的另一件事是,Java的HttpURLConnection类的 HTTP请求不支持PATCH方法本身(这 做更新多个字段时,由Web API) 。这个 解决了指定POST方法并添加额外的“X-HTTP-Method-Override”属性。

connection.setRequestProperty("X-HTTP-Method-Override", "PATCH"); 
connection.setRequestMethod("POST"); 

您可以在GitHub上检查出的代码: https://github.com/jlattimer/CrmWebApiJava

+0

这个答案过于脆弱的链接腐烂。你能用这种方式来回答这个问题吗? – Ceribia

+0

我已经添加了来自Jason Lattimer博客的示例 – Aron

+0

太棒了!感谢您的改进。 – Ceribia