2014-01-14 3 views
8

В соответствии с этим: http://msdn.microsoft.com/en-us/library/windowsazure/dn424880.aspx и это http://msdn.microsoft.com/en-us/library/windowsazure/hh974467.aspxзапросов к Windows Azure Active Directory Graph Api покоем Зов

я должен быть в состоянии сделать запрос GET

https://graph.windows.net/<my-object-guid>/tenantDetails?api-version=0.9 

и я использую Fiddler просто начните. Установка этого в композиторе: User-Agent: Fiddler Хост: graph.windows.net Авторизация: Значок переноса для него. (Мой токен, используйте некоторый C# из WAAL, чтобы получить токен).

Это то, что возвращается

HTTP/1.1 401 Unauthorized 
Cache-Control: private 
Content-Type: application/json;odata=minimalmetadata;streaming=true;charset=utf-8 
Server: Microsoft-IIS/8.0 
WWW-Authenticate: Bearer realm="<my-object-guid>", error="invalid_token", error_description="Access Token missing or malformed.", authorization_uri="https://login.windows.net/<my-object-guid>/oauth2/authorize", client_id="00000002-0000-0000-c000-000000000000" 
ocp-aad-diagnostics-server-name: 11iIdMb+aPxfKyeakCML7Tenz8Kyy+G8VG19OZB/CJU= 
request-id: 99d802a3-0e55-4018-b94d-a8c00ec8f171 
client-request-id: 7ed93efd-86c5-4900-ac1f-747a51fe1d8a 
x-ms-dirapi-data-contract-version: 0.9 
X-Content-Type-Options: nosniff 
DataServiceVersion: 3.0; 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
X-Powered-By: ARR/3.0 
X-Powered-By: ASP.NET 
Date: Tue, 14 Jan 2014 00:13:27 GMT 
Content-Length: 129 

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

Маркер принимается, когда я делаю некоторые вещи в моем приложении, поэтому я не верю его уродливы.

+2

Вы когда-нибудь поняли это? Я столкнулся с той же ошибкой – rwisch45

+0

Я так не думаю, никогда не пробовал это снова после того, как я столкнулся с проблемой здесь. –

ответ

16

Я продолжал сталкиваться с этой проблемой. Я использую следующий код, чтобы получить маркер носителя для моего родного приложения:

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

Используя этот маркер работал отлично для авторизации действия в собственном приложении, но я получаю ту же ошибку, как ОП при попытке используйте тот же токен, что и авторизация для API-интерфейса Graph.

То, что мне нужно было сделать, это получить новый токен специально для API-интерфейса Graph. Я использовал тот же код, что и выше, но использовал "https://graph.windows.net" вместо "MYAPP_ID". Таким образом, чтобы быть ясно, следующий код дал мне правильный маркер OAuth для API Graph:

 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.

+1

Я боролся с той же проблемой, используя Fiddler. Я пробовал ваше решение, и это сработало! С помощью Fiddler я захватывал трафик своего приложения. Я отредактировал значение ресурса в запросе токена POST на «https://graph.windows.net». Код доступа, который я получил, разрешил мне выполнять запросы от скрипача до https://graph.windows.net/x/ группы? апи-версия = 1.5. Огромное спасибо!! –

+0

Зачем мне нужно получить еще один access_token только для получения сведений о пользователе, у меня уже есть токен доступа для этого пользователя. – Dabbas

+0

Также обратите внимание, что если вы только что дали разрешение для своего приложения AD читать и получать доступ к вашему каталогу, вы можете нужно подождать несколько часов, прежде чем это станет эффективным. Тем временем вы можете получить «недостаточные привилегии для завершения операции». –