2016-10-05 4 views
0

Я пытаюсь использовать NodeJs для доступа к некоторым сведениям о Azure AD. Я могу получить токен доступа OK, однако всякий раз, когда я пытаюсь вызвать что-либо с помощью Graph API (в данном случае это только список всех групп), он говорит, что у меня есть «Недостаточно привилегий для завершения операции».Права, необходимые для отображения групп ADA ADO

Я зашел в приложение в AD и добавил все разрешения (просто чтобы убедиться), и я все еще получаю эту ошибку. Я что-то пропустил? Вот мой код:

var msRestAzure = require('ms-rest-azure'); 
var graphRbacManagementClient = require('azure-graph'); 
var tenantId=''; 
// Enter your tenant ID here which can be found from your Azure AD URL 
// Eg. https://manage.windowsazure.com/example.com#Workspaces/ActiveDirectoryExtension/Directory/<TenantId>/users 

var clientId = '' 
var clientSecret = '' 

console.log('Starting'); 

msRestAzure.loginWithServicePrincipalSecret(clientId, clientSecret, tenantId, { tokenAudience: 'graph' }, function (err, credentials, subscriptions) { 
    if(err){ 
     console.log('Could not get token', err) 
    } 

    console.log('Logged In'); 

    var client = new graphRbacManagementClient(credentials, tenantId); 

    console.log("Client created"); 

    client.groups.list({}, function(err, result){ 
     if(err){ 
      console.log('Could not list groups', err) 
     } 
    }) 
}); 

Обнаружена ошибка:

{ 
    "statusCode": 403, 
    "request": { 
     "rawResponse": false, 
     "queryString": { 

     }, 
     "method": "GET", 
     "headers": { 
      "x-ms-client-request-id": "2b0e7464-bf4f-41d3-8440-38797bf0d72b", 
      "accept-language": "en-US", 
      "Content-Type": "application/json; charset=utf-8" 
     }, 
     "url": "https://graph.windows.net/5a677fc4-23da-4e7a-a0fa-75f2c53e9c90/groups?api-version=1.6", 
     "body": null 
    }, 
    "response": { 
     "body": "{\"odata.error\":{\"code\":\"Authorization_RequestDenied\",\"message\":{\"lang\":\"en\",\"value\":\"Insufficient privileges to complete the operation.\"}}}", 
     "headers": { 
      "cache-control": "no-cache", 
      "pragma": "no-cache", 
      "content-type": "application/json;odata=minimalmetadata;streaming=true;charset=utf-8", 
      "expires": "-1", 
      "server": "Microsoft-IIS/8.5", 
      "ocp-aad-diagnostics-server-name": "F3xU7bkLCvTOf62bCyNdsiLFnuyfFODP68vB9RmoAS0=", 
      "request-id": "f8404560-e300-4cd1-8a4b-a6487b06f7a2", 
      "client-request-id": "97cd97fa-448f-44bb-87dc-7d48505e80db", 
      "x-ms-dirapi-data-contract-version": "1.6", 
      "ocp-aad-session-key": "REMOVED", 
      "x-content-type-options": "nosniff", 
      "dataserviceversion": "3.0;", 
      "strict-transport-security": "max-age=31536000; includeSubDomains", 
      "access-control-allow-origin": "*", 
      "x-aspnet-version": "4.0.30319", 
      "x-powered-by": "ASP.NET, ASP.NET", 
      "duration": "1097838", 
      "date": "Wed, 05 Oct 2016 14:10:41 GMT", 
      "connection": "close", 
      "content-length": "139" 
     }, 
     "statusCode": 403 
    }, 
    "body": { 
     "code": "Authorization_RequestDenied", 
     "message": "Insufficient privileges to complete the operation." 
    } 
} 

Для тестирования я добавил все разрешения на оба графика и лазурного AD к этому клиенту:

enter image description here

+0

Можете ли вы разместить полное сообщение об ошибке (включая идентификатор корреляции и отметку времени)? Можете ли вы также опубликовать снимок экрана о разрешениях, которые вы настроили для своего приложения? –

+0

Добавлено в полное сообщение об ошибке - не найти идентификатор корреляции в любом месте, как я могу его найти? – smuff

+0

Вы проверили, работает ли то же самое за пределами функций Azure? Если нет, то вы можете упростить свой вопрос, удалив все ссылки на Azure Functions. –

ответ

3

Просто потому, что вы выбрали разрешения на Azure Portal, это не значит, что ваше приложение было предоставлено им. Я бы рекомендовал декодировать маркер, который вы отправляете на AAD Graph, используя JWT-декодер, например calebb.net. Требование токена scp или roles должно содержать необходимое разрешение, в данном случае Groups.Read.All.

Если токен отсутствует Groups.Read.All, вам необходимо, чтобы администратор арендатора «согласился» с приложением, используя параметр , описанный here. Это предоставит вашему приложению разрешения, которые вы запросили.

Если токен содержит разрешение Groups.Read.All, вы должны сообщить нам об этом, потому что это будет ошибкой в ​​API-интерфейсе Graph.

+0

Привет @dstrockis - Я уверен, что вы правы, но я не могу понять, как получить администратору арендатора, чтобы он согласился (прочитал статью и до сих пор не выяснил!). Я думал, что, войдя в клиентскую тайну, а не в учетную запись пользователя, мне бы не пришлось это делать. Можете ли вы предоставить код, который я могу добавить к выше, чтобы добавить это согласие? (Или мне просто нужно запустить его один раз, чтобы предоставить его?). – smuff

+0

Также - забыл добавить, что вы правы, у меня нет роли в токене. – smuff

+0

@smuff есть учебник или статья, из-за которой вы изначально следуете? Ид, чтобы получить его обновление с инструкциями, которые вам нужны, согласие администратора немного запутанно. – dstrockis

0

Чтобы можно было вызвать конкретный API REST, нам необходимо обеспечить достаточные привилегии. Группа REST требует, чтобы пользователи, у которых есть вход, имеют разрешение на использование.

Существует два вида областей, только для приложений или делегированных. Области приложений (также известные как роли приложений) предоставляют приложению полный набор привилегий, предлагаемых областью. Области только для приложений обычно используются приложениями, которые запускаются как служба без присутствия подписанного пользователя.

Области делегированных разрешений предназначены для приложений, которые действуют от имени пользователя. Эти области делегируют привилегии пользователя, которому разрешен вход, позволяя приложению действовать как пользователь. Фактические привилегии, предоставленные приложению, будут наименее привилегированной комбинацией (пересечением) привилегий, предоставляемых областью действия, и областями, которыми обладает пользователь, зарегистрированный в сети. Например, если область разрешений предоставляет делегированные привилегии для записи всех объектов каталога, но пользователь с включенным правом имеет права только обновлять свой собственный профиль пользователя, приложение будет иметь возможность писать только профиль пользователя, но никаких других объектов ,

Настоящая спецификация - это документ о Microsoft Graph, однако он также должен применяться к другим службам Microsoft.

Смежные вопросы