Получение «Service_InternalServerError» при создании приложения через Graph API в Azure AD

Я пытаюсь создать приложение в Azure AD программно. Я добавил начальное приложение на портал управления и предоставил разрешения для Graph Api и Active Directory (чтение/запись каталога в обоих).

Сначала я получаю код авторизации, образец формирования URL приведен ниже:

uri = Addressable::URI.parse('https://login.microsoftonline.com/common/oauth2/authorize')
  uri.query_values = {
    response_type: 'code',
    response_mode: 'form_post',
    client_id: <Application ID>,
    redirect_uri: <Redirect URI>,   
    resource: 'https://graph.windows.net/',
    state: <UUID>,
  }

После этого я получаю токен авторизации через следующий запрос:

client = OAuth2::Client.new(client_id,
                          client_secret,
                          :site => 'https://login.microsoftonline.com',
                          :authorize_url => '/common/oauth2/authorize',
                          :token_url => '/common/oauth2/token')

auth_token = client.auth_code.get_token(auth_code,
                                 :redirect_uri => redirect_uri,
                                 :scope => 'openid'

Наконец, я могу сделать вызов графического API для конечной точки приложений, чтобы добавить приложение:

graph_url = 'https://graph.windows.net/<TENANT ID>/applications?api-version=1.6'
body = {
  'identifierUris' => ['<URI>'],
  'availableToOtherTenants' => true,
  'homepage' => <Home PAGE>,
  'replyURLs' => <SOME REPLY URL>,
  'displayName' => <APP DISPLAY NAME>,
}
headers = {'Content-Type' => 'application/json','Authorization' =>  "Bearer #{auth_token.token}"}
conn = Faraday.new(graph_url, {headers: headers})
res = conn.post graph_url, body.to_json

В ответ я получаю следующую ошибку, которая не очень описательная и не уверена, что не так:

{"odata.error"=>{"code"=>"Service_InternalServerError", "message"=>{"lang"=>"en", "value"=>"Encountered an internal server error."}}}

Любые предложения приветствуются.


person natia    schedule 10.01.2017    source источник


Ответы (1)


Я исправил свою проблему, получая внутреннюю ошибку при попытке создать приложение. Будьте осторожны при формировании «тела» для http-запроса. Я добавлял дополнительный «/» в конце URL-адреса в свойстве «replyUrls». Также важно добавить тип данных для каждого свойства. Вот пример запроса, который работал у меня:

body = {
  "odata.type" => "Microsoft.DirectoryServices.Application",
  "identifierUris" => ["https://mynamehere.com/#{someidentifier}"],
  "[email protected]" => "Collection(Edm.String)",
  "availableToOtherTenants" => true,
  "homepage" => 'https://myhomepage.com',
  "replyURLs" => ["http://localhost:3000/someUrl"],
  "[email protected]" => "Collection(Edm.String)",
  "displayName" => 'This is my app',   
 }

Вот ссылка на блог, который был полезен:

http://blog.mszcool.com/index.php/2016/06/a-deep-dive-into-azure-ad-multi-tenant-apps-oauthopenidconnect-flows-admin-consent-and-azure-ad-graph-api/

person natia    schedule 11.01.2017
comment
Рад, что вы смогли решить эту проблему. В прошлом я обнаружил, что действительно простой способ избежать подобных проблем — сначала выполнить «GET» для аналогичного объекта, затем изменить этот объект, чтобы он содержал новые свойства, которые вы хотите, а затем использовать это для вашего POST. Например, я бы создал приложение с помощью портала Azure, а затем использовал скелет этого приложения для создания новых приложений в моем запросе POST. Другим советом может быть использование Fiddler для захвата HTTP-трафика PowerShell или другого сервиса, который может создавать приложения с использованием графа, а затем использовать его для создания тела. - person Shawn Tabrizi; 12.01.2017
comment
Спасибо за подсказку, учту на будущее! - person natia; 12.01.2017