Расширение схемы Azure - сообщение об ошибке: ссылка на объект не установлена ​​на экземпляр объекта - PullRequest
0 голосов
/ 14 мая 2018

Я тестирую расширения схемы Azure с помощью простого скриптового скрипта для Microsoft Graph API.Сначала я запрашиваю список расширений схемы, и это, кажется, работает (хотя я не уверен, где расширения в ответе были установлены, я предполагаю, что они там по умолчанию).Затем я пытаюсь отправить расширение схемы POST, но при этом появляется сообщение об ошибке:

[error: [
   code:InternalServerError, 
   message:Object reference not set to an instance of an object., 
   innerError:[request-id:xxxxx-xxxx-xxx-xxxxxx, date:2018-05-14T00:46:00]]]

Это код для запроса GET и ответа:

def uriTestGET = "https://graph.microsoft.com/v1.0/schemaExtensions?"
def httpTestGET = new HTTPBuilder(uriTestGET)
httpTestGET.ignoreSSLIssues()
httpTestGET.request(GET,JSON) { req ->

httpTestGET.parser.'application/json'
headers.'Authorization' = 'Bearer ' + AzureToken
headers.'Content-Type' = 'application/json'
response.failure = { resp, json ->

    println "GET Failure. GROUP: ${resp.statusLine}"
    println(json)

}
response.success = { resp, json ->

    println "GET Success. GROUP: ${resp.statusLine}"
    println(json)
}
}

Ответ

[   
 @odata.context:https://graph.microsoft.com/v1.0/$metadata#schemaExtensions, 
 @odata.nextLink:https://graph.microsoft.com/v1.0/schemaExtensions?$skiptoken=XXXXXXXXXX, 
 value:[[
   id:adatumisv_exo2, 
   description:sample desccription, 
   targetTypes:[Message], 
   status:Available, 
   owner:xxxxxx-xxxx-xxxx-xxxx, 
   properties:[
     [name:p1, type:String], 
     [name:p2, type:String]]], 
   [id:circuitid_globals, 
    description:Circuit ID Graph Global Schema, 
    targetTypes:[Group, User], .. etc

И следующий запрос POST:

def uriTestPOST = "https://graph.microsoft.com/v1.0/schemaExtensions?"
def httpTestPOST = new HTTPBuilder(uriTestPOST)
httpTestPOST.ignoreSSLIssues()
httpTestPOST.request(POST,JSON) { req ->

httpTestPOST.parser.'application/json'
headers.'Authorization' = 'Bearer ' + AzureToken
headers.'Content-Type' = 'application/json'
body = [
        "id":"TestExtension",
        "description": "Test to add user object schema extension",
        "status": "Available",
        "targetTypes": ["user"]

]

response.failure = { resp, json ->
    println "POST Failure. GROUP: ${resp.statusLine}"
    println(json)

}
response.success = { resp, json ->

    println "POST Success. GROUP: ${resp.statusLine}"
    println(json)
}

}

Получается ответ:

[error:[
 code:InternalServerError, 
 message:Object reference not set to an instance of an object.,
 innerError:[request-id:xxxx-xxxx-xxxx-xxxx, date:2018-05-14T00:46:00]]]

Обновленное тело выглядит следующим образом-

 body = [
        "id":"TestExtension",
        "description": "Test to add user object schema extension",
     // "status": "Available",
        "targetTypes": ["User"],
        "properties" : [["name": "ExtensionProperty", "type":"String"]]

]

И это новое сообщение об ошибке:

   [error:[
    code:Authorization_RequestDenied, 
    message:Insufficient privileges to complete the operation., 
    innerError:[request-id:xxxx-xxxx-xxxx-xxxx, date:2018-05-14T05:09:41]]]

Я расшифровал токен, и он показывает, что включены следующие роли:

Расшифровывая токен, он устанавливает следующие роли:

"roles":     [
   "User.ReadWrite.All",
   "Directory.ReadWrite.All",
   "User.Invite.All" ]

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

1 Ответ

0 голосов
/ 15 мая 2018

Система автоматически выбирает между использованием прикладных или делегированных разрешений на основе выбранного вами OAuth-гранта:

  • Предоставление клиентских учетных данных = приложение
  • Предоставление кода авторизации = делегировано
  • Неявный грант = делегированный

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

...