1

プログラムでAzure ADでアプリケーションを作成しようとしています。 管理ポータルに初期アプリケーションを追加し、Graph ApiとActiveディレクトリ(両方でディレクトリの読み込み/書き込み)にアクセス権を与えました。Azure ADのグラフAPIを使用してアプリケーションを作成するときに 'Service_InternalServerError'を取得する

まず私は認証コードを取得し、サンプル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>, 
    } 

I認証怒鳴るリクエストを通じてトークンを取得:

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 

回答では、 hはあまり説明的ではなく、何が間違っているかわからない:

何か提案があります。

答えて

1

私は自分の問題を解決し、アプリケーションを作成しようとしたときに内部エラーが発生しました。 httpリクエストで 'body'を作成するときは注意してください。私は 'replyUrls'プロパティのurlの最後に余分な '/'を追加していました。また、プロパティごとにデータ型を追加することも重要です。ここで

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リクエストで新しいアプリケーションを作成します。別のヒントは、PowerShellのHTTPトラフィック、またはグラフを使用してアプリケーションを作成できる別のサービスを取得するためにFiddlerを使用し、それを使用して自分の身体を作成することです。 –

+0

このチップをお寄せいただきありがとうございます。 – natia

関連する問題