1

Angular.JS SPA 内で Adal.JS を使用する際に問題があります。ユーザーが認証された後 (通常の AAD リダイレクト フロー)、Bearer Token が Authorization-Header にそのまま追加されます。

ここで注意が必要なのは、特定の状況で、許可されたユーザーのみがアクセスできるサーバーからファイルをダウンロードする必要があることです。残念ながら、そのシナリオに対する適切な解決策はまだありません。新しいウィンドウでファイルのダウンロードをトリガーするために使用 $window.open('domain.com/api/getSecretFile?id=1');すると(Angularインスタンスを維持するために)、ブラウザはBearer-TokenをAuthorization-Headerに追加しません(Angularの外側にあるため)->サーバーは不正な呼び出し - これは 100% 論理的です。では、どうすればこの問題を解決できますか?

私の考え: ウィンドウを開く呼び出しを次のように変更して$window.open('domain.com/api/getSecretFile?id=1&token=mybearertoken');、API がこの追加のパラメーターを何らかの方法でチェックできるようにします。そのため、Angular 内のどこかで利用できるベアラー トークンを取得する必要があります。しかしここで?ベアラー トークンにアクセスするにはどうすればよいですか? 何か案は?

私の場合、サーバー側の部分は ASP.Net によって実現されています。この部分については、利用可能なソリューションがあります: .NET Web API 2 OWIN Bearer Token Authentication direct call

しかし、まずトークンにアクセスする必要があります。それとも、問題を解決するための別の適切な方法がありますか? 前もって感謝します!

4

2 に答える 2

4

Angular 内で Bearer トークンにアクセスするための解決策を見つけました。

app.controller('someController', ['adalAuthenticationService', function (adalAuthenticationService) {

  var resource = adalAuthenticationService.getResourceForEndpoint('domain.com/');
  var tokenStored = adalAuthenticationService.getCachedToken(resource);
  alert(tokenStored);
}]);

domain.comEndpointsAdal.JS init: 内で定義されたリソースになりますadalAuthenticationServiceProvider.init(...)

于 2016-01-18T10:34:40.893 に答える
0

エンドポイント リストを定義し、インターセプター呼び出しを使用できます。

于 2016-01-26T23:39:56.640 に答える