1

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

Сначала я получить код авторизации, формирование выборки 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' 

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

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 

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

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

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

ответ

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/

+0

Рад, что вы были в состоянии решить эту проблему. В прошлом я нашел, что очень простой способ избежать таких проблем - сначала сделать «GET» на аналогичном объекте, а затем изменить этот объект, чтобы он содержал нужные вам новые свойства, а затем использовать его для вашего POST. Например, я создам приложение с помощью Azure Portal, а затем с помощью этого приложения создам новые приложения в своем POST-запросе. Другим советом может быть использование Fiddler для захвата HTTP-трафика PowerShell или другой службы, которая может создавать приложения с использованием графика, а затем использовать их для создания вашего тела. –

+0

Спасибо за подсказку, запомните это на будущее! – natia