5

Windows Azure Active Directory での認証用に構成された OWIN ミドルウェアを使用して、WebAPI OData 3.0 Web サービスを作成しました。ODataControllers は属性でマークされ[Authorize]、IAppBuilder は次のように構成されます。

app.UseWindowsAzureActiveDirectoryBearerAuthentication(
            new WindowsAzureActiveDirectoryBearerAuthenticationOptions
            {
                Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
                TokenValidationParameters = new TokenValidationParameters {
                    ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
                },
            });

ida:Tenantは Windows Azure テナントでありida:Audience、アプリ ID URI です。

ここで、AzureAD のアカウントを使用して認証し、Excel PowerQuery を使用してこのサービスを利用したいと考えています。ただし、「組織アカウント」を選択して「サインイン」しようとすると、次のエラーが表示されます。

つなげられない。この資格情報の種類は、このリソースではサポートされていません。

Fiddler では、要求が Bearer ヘッダーで行われていることがわかりますが、空です。

AzureAD Graph をクエリするときと同様の動作を実現したいと考えています。
たとえば、https://graph.windows.net/.onmicrosoft.com/users?api-version=2013-04-05を使用しようとすると、シングル サインオン ウィンドウが開き、Fiddler でそれを確認できますトークンが渡されます。

どうすればこの動作を実現できますか? 私は何が欠けていますか?

ありがとう!

4

2 に答える 2

7

認証中の PowerQuery と OData サービス間の予期されるフローは次のとおりです。

  • ビルダーでサービスへの URI を入力して [OK] をクリックすると、サービスにアクセスするための資格情報を求める資格情報プロンプトが表示されます。
  • 通常、Azure Active Directory (AAD) が ID プロバイダーである場合は、組織アカウントを選択します。
  • サインインをクリックすると、PowerQuery はサービスにチャレンジ リクエストを送信します。これは、表示されている空のベアラーです。その理由は、ID プロバイダーが何であるか、またはどこにログインする必要があるかがわからないためです。要求は、認証エンドポイント URL を含む WWW-Authenticate ヘッダーを含む 401/403 応答を期待しています。

  • 予想されるヘッダー形式は次のとおりです。WWW-Authenticate authorization_uri=”token service uri” 引用符はオプションです。そのヘッダーが見つからない場合は、「接続できません」というエラー メッセージが表示されます。この資格情報の種類はサポートされていません。

  • たとえば、シナリオでは、トークン サービスの uri はhttps://login.windows.netです。
  • その応答を受け取ると、ヘッダーから URL を取得し、ログイン要求を発行します。その時点で、AAD からのログイン ページが表示され、組織の資格情報を使用してログインできるようになります。
  • サインインの結果 (トークンである必要があります) を待ちます。そのトークンは、そのサービスからデータを要求するたびに、ヘッダーのベアラーを埋めるために使用されます。

これを機能させるには、AAD のアプリケーション オブジェクトに関して次の 2 つの重要な点があります。

  • AppIdUris プロパティには、サービス URI と一致するワイルドカード URI が必要です。リソース ID を含める必要があるログイン要求を送信するとき、リソースは接続先のサービスの機関です。したがって、サービス URL が myservice.com/myODatafeed.svc の場合、機関にはスキーム、ホスト、およびポート番号が含まれ、myservice.com/ が機関になります。company1.myservice.com のように異なるテナントを持つ可能性のあるサービスの場合、AppIdUri には https://*.myservice.com が必要です。それ以外の場合は、https://myservice.comのみ。
  • 2 つ目 (これは AAD 固有のものです)、AAD は現在、ファースト パーティ クライアント (PowerQuery) からサード パーティ サービス (お客様のサービス) への認証をサポートしていません。しかし、うまくいけばすぐに:) たぶん、あなたが残りを終わらせるとき:)!
于 2015-02-04T20:08:40.953 に答える
0

更新: これは、PowerQuery の最新リリースで有効になっています。あなたのアプリは user_imperonation スコープを公開する必要があります。

于 2016-12-04T03:36:04.987 に答える