2016-09-06 117 views
8

当按照这份指南:https://azure.microsoft.com/en-us/documentation/articles/resource-manager-api-authentication/#_get-objectid-of-application-service-principal-in-user-azure-ad访问令牌丢失或畸形调用图形API

我已经到了,我打电话graph.windows.net获取用户Azure的AD服务主体的的ObjectId阶段。

当我做了电话,但是,我得到了以下信息:

{"odata.error":{"code":"Authentication_MissingOrMalformed","message":{"lang":"en","value":"Access Token missing or malformed."},"values":null}} 

我已经试图与“onmicrosoft.com”地址替换ClientID的太(这样graph.windows .net/appname.onmicrosoft.com/...),仍然收到相同的消息。

+0

只是一个关于赏金评论:不管解决这个问题得到赏金明显。 – Asaf

+0

你能告诉我们你的代码样本吗?错误很明显,你错过了token.so,要么你没有发送它,或者没有以API期望的方式发送它。 –

+0

@Asaf我们在使用Fiddler检索令牌时遇到了这个问题,事实证明这是由于应用/客户端密钥包含特殊字符,需要将其编码为不记名令牌请求的一部分。 – jimpaine

回答

4

检查此链接https://github.com/Azure/azure-sdk-for-node/issues/1782

我一直运行到这个问题。我用下面的代码为我的本机应用程序的承载令牌:

 var authContext = new AuthenticationContext("AUTHORITY"); 
     string token; 
     try 
     { 
      var authresult = authContext.AcquireToken("MYAPP_ID","MYAPP_CLIENTID","MYAPP_REDIRECTURI"); 
      token = authresult.AccessToken; 
     } 

使用该令牌工作的罚款为自己的应用程序内授权的行动,而是努力时,我会得到相同的错误的OP使用与Graph API的授权相同的标记。

我所要做的就是获得专门用于Graph API的新令牌 - 我使用了与上面相同的代码,但我使用"https://graph.windows.net"而不是"MYAPP_ID"。因此,要明确,下面的代码给了我图形API正确的OAuth令牌:

 var authContext = new AuthenticationContext("AUTHORITY"); 
     string token; 
     try 
     { 
      var authresult = authContext.AcquireToken("https://graph.windows.net","MYAPP_CLIENTID","MYAPP_REDIRECTURI"); 
      token = authresult.AccessToken; 
     } 

只要确保你在Azure中注册的应用具有必要的权限来访问您的Azure中域的目录。

可能对你有帮助!

+0

具有https://graph.windows.net的调用用于调用https://login.microsoftonline.com/'+ APP_ID +'/ OAuth2/Token'的阶段?因为调用不适合我graph.windows.net .. – Asaf

+0

我也尝试调用_'https://login.microsoftonline.com/'+ tenantId +'/ OAuth2/Token'_(正常情况),但将** client_id **参数更改为graph.windows.net – Asaf

2

为了扩展我的评论,当应用秘密包含需要编码的字符时,我们已经看到了这一点。如“+”和“=”

enter image description here

如果不使用某些客户端的助手提供或使用Fiddler或邮递员正在测试将需要URL调用图形API之前编码的秘密,所以看起来就变成:

“7hIkYG5m7xJQnocThxMc4yPjtbRP7bO41aNC%2bbrEzvo%3D”

+1

对此肯定吗?当我这样做时,我得到:“错误”:“invalid_client”,“error_description”:错误验证凭据。提供无效的客户机密码 – Asaf

+0

只需确认,这是在发送到https://login.microsoftonline.com/TENANT_ID/OAuth2/Token时的** client_secret **字段 – Asaf

相关问题