2016-09-21 7 views
0

私はかなりシンプルであるべきだと思うシナリオを持っていますが、解決策を見出すことはできません。シェアポイントページから365の認証されたWeb APIをオフィスに呼び出すjavascript

セットアップ:

1)SharePoint OnlineのWebサイト(ユーザーがページを見るために認証を受ける必要があります)

2).NET MVCのWeb APIサービスエンドポイント(ユーザーがデータを取得するために認証されなければなりませんサービス)

これらの両方が同じAzure Active Directoryを使用して認証されます。 Web APIはAzure ADに登録されています。

問題:

私は、SharePoint OnlineのページにいくつかのJavaScriptをつけたい(ないSharepointのアドインではなく、AngularJS SPA)を使用したWeb APIへのAJAX呼び出しを行います(これはajax呼び出しであるため、ユーザーにはプロンプトが表示されません)。

私はADALライブラリを調べてみましたが、私が見つけ出すことができるすべてのJavaScriptのものにはAngularを使用する必要があり、ユーザーに2回目の認証が必要です。私はOAuth 2.0を使っていくつかの文書を見つけましたが、(私が知る限りでは)Sharepoint OnlineのページがAJAXであるために同意することができないようにするためにクライアントに要求します同意ページはブラウザに表示されません(Azure ADの管理者がアプリを承認したにもかかわらず、これもやっています)。

ユーザーはSharePointページを離れる必要がないと思われ、2回目の資格情報を入力する必要はありません。私は、SharePoint Onlineへのログインも、社内のアプリケーションのログインとして使用できるようにする必要があると考えています。

誰かが私を正しい方向に向けることができたら、私はそれを高く評価します。前もって感謝します。

答えて

1

通常、Azure ADによって保護されているリソースを呼び出す場合は、OAuth 2.0経由でアプリケーションを承認する必要があります。

隠しiframeをSharePointのオンラインページに配置できましたか?可能であれば、Azure AD暗黙のフローを使用して、iframeを通してトークンを取得し、Azure ADによって保護されたRESTを、iframeによるトークンの戻りによって呼び出すことができます。暗黙的なフローを有効にするには、Azureポータルからアプリケーションマニフェストをダウンロードし、 'oauth2AllowImplicitFlow'をtrueに変更する必要があります。

ユーザーがアプリケーションに同意することを要求しない単一のテナントを開発していただけの場合。ここではHTMLコード要求があなたの参考のためにインラインフレームからトークンです:

<iframe width="0" height="0" id="oauthHideIframe" src="https://login.microsoftonline.com/{tenantId}/oauth2/authorize?response_type=token&client_id={Client_Id}&redirect_uri={redirect_Url}&resource={your web api app url register on the protal}"> </iframe> 

とiframeから親ウィンドウにトークンを渡すために、我々はcorss-のorignalの通信を可能のwindow.postMessageを使用することができます。

関連する問題