0

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 ソリューションは機能しません。

4

1 に答える 1

0

401 エラーに基づいて、使用していたトークンがサービスに対して認証できないようです。

考えられる理由の 1 つは、リソースに正しくないトークンを使用していたことです。ここからトークンを解析して、トークンのaudクレームが Web API 用に構成したオーディエンスと一致するかどうかを確認できます。

このエラーのもう 1 つの理由は、期限切れのトークンを使用していた場合です。

クライアント バックグラウンド アプリケーションで機能したトークンを使用して、問題が修正されたかどうかを確認することをお勧めします。

于 2016-09-21T03:05:52.397 に答える