AzureAD ベースのアプリケーションを作成しようとしています。機能するバックエンドがあり、ヘッダーにアクセス トークンを渡すことでアプリケーションに接続できる機能するクライアント サービスも 1 つあります。
ただし、ADAL.js を使用してこのコードで承認しようとすると、次のようになります。
$.ajax({
url: '/api/folder',
type: 'POST',
headers: { 'Authorization': 'Bearer ' + getAuthHeaders(), },
xhr: function () {
myXhr = $.ajaxSettings.xhr();
if (myXhr.upload) {
myXhr.upload.addEventListener('progress', progressBar, false);
}
return myXhr;
},
success: completeHandler = function (data) {
alert('Success!');
modal.remove();
updateFileBrowsers(folderName);
},
error: errorHandler = function (jqXHR, textStatus, errorThrown) {
alert('Fail! :(');
},
data: formData,
cache: false,
contentType: false,
processData: false
}, 'json');
サーバーからの応答で 401 しか返されません。コントローラーは非常にシンプルで、コントローラー全体の [Authorize] 表記が API アクセス ポイントにあります。
トークンが空でないことを確認しましたが、そうではありません。アプリを Azure アプリケーションに追加しました。サインインしてからヘッダーを設定するクライアント バックグラウンド アプリケーションで使用されるコントローラーを使用する場合、まったく同じ方法で正常な接続が生成されます。
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
私が見ることができる唯一の違いは、1 つは ADAL.js を使用し、もう 1 つは .NET ネイティブ クラスを使用して要求ヘッダーを設定することです。
明確化: httpClient は魔法のように機能します。SPA ソリューションは機能しません。