2016-06-09 21 views
0

我要整合office365服务管理API,用于收集事件匹配,但我得到以下错误,主题必须从它。我想用客户端凭证的方式来使用服务,服务调用客户端断言发行人要求

{

“错误”: “invalid_client”,

“ERROR_DESCRIPTION”:“AADSTS50048:主题必须在客户机断言发行人根据权利要求匹配

\ r \ nTrace ID:1ad7acd8-3945-4fe0- a313-07638eb76e42 \ r \ n相关ID:a 6c3a3c9-b737-4bfc-894f-3086c3ce8dfa \ r \ nTimestamp:2016年6月9日07:20:15Z “

”error_codes“:[50048 ],

”时间戳“:” 2016- 7月6日至9日:20:15Z”,

“trace_id的”: “1ad7acd8-3945-4fe0-a313-07638eb76e42”,

“CORRELATION_ID”: “a6c3a3c9-b737-4bfc-894f-3086c3ce8dfa”

}

我使用以下文档进行整合, 为了获取客户端缓存, https://msdn.microsoft.com/en-us/library/azure/dn645543.aspx我得到了这个。但对于访问令牌, https://msdn.microsoft.com/en-us/library/office/dn707383.aspx我没有得到这个作为响应获取以上错误。 有人请帮我:)

+0

可以包括你正在做的请求?另外,你是否查看了Java的认证库(https://github.com/AzureAD/azure-activedirectory-library-for-java)? – Saca

回答

0

你是怎么得到client_assertion的?您提供的link没有描述如何获取'client_assertion'。它会获取带有应用程序ID和秘密的令牌,但不支持Office 365管理API。你可以参考blog关于'client_assertion'。

在此可以使用ADAL获得客户端凭证的访问令牌的C#代码示例流程:

 string clientId = "{clientId}"; 
     string certThumbprint = "‎{copy from mmc}"; 
     certThumbprint = certThumbprint.Replace("\u200e", string.Empty).Replace("\u200f", string.Empty).Replace(" ", string.Empty); 
     string apiResourceId = "https://manage.office.com"; 
     X509Certificate2 cert = null; 
     X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
     string authority = "https://login.windows.net/{yourTentant}"; 

     var authContext = new AuthenticationContext(authority); 
     try 
     { 
      store.Open(OpenFlags.ReadOnly); 
      cert = store.Certificates.Find(X509FindType.FindByThumbprint, certThumbprint, false)[0]; 
     } 
     finally 
     { 
      store.Close(); 
     } 
     var certCred = new ClientAssertionCertificate(clientId, cert); 


     AuthenticationResult result = null; 
     try 
     { 
      result = await authContext.AcquireTokenAsync(apiResourceId, certCred); 
     } 
     catch (Exception ex) 
     { 

     }