2017-09-10 9 views
0

CORS要求をAADで保護されたAzure Webサービスに要求しようとしています。呼び出しを行っているアプリケーションには、バックエンドコードはありません - html + jsのみです。 私はadal.jsを使用して、すべての設定(Azure Web App、adal.jsの設定)を行い、adal.jsを使用してトークンを受け取ることができました(これはAdvanced RESTクライアントを使用して有効であることを確認できます)。私は以下のように電話をかけるしようとすると、OAuth2 CORSがAzure Web Appを呼び出すのは、JavaScriptのみを使用してAADで保護されています。

問題がある:

var xhr = new XMLHttpRequest(); 
if ("withCredentials" in xhr) { 
    // XHR for Chrome/Firefox/Opera/Safari. 
    xhr.open(method, url, true); 
} else if (typeof XDomainRequest != "undefined") { 
    // XDomainRequest for IE. 
    xhr = new XDomainRequest(); 
    xhr.open(method, url); 
} else { 
    // CORS not supported. 
    xhr = null; 
} 
xhr.withCredentials = true; 
xhr.onload = function() { ... }; 
xhr.onerror = function (error) { ... }; 
xhr.send() 

私は

XMLHttpRequest cannot load 
<myAppUrl>. Redirect 
from <myAppUrl> to 
'https://login.windows.net/<guid>/oauth2/authorize?response_type=code+id_token&redirect_uri=<myAppUrl>%2F.auth%2Flogin%2Faad%2Fcallback&client_id=<guid>&scope=openid+profile+email&response_mode=form_post&nonce=cdf7754a3d66498baad6809f3de0b0ae_20170910165538&state=redir%3D%252Fapi%252FValues' 
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is 
present on the requested resource. Origin 'http://localhost:59672' is 
therefore not allowed access. 

を受け、私は唯一のAuthorizationヘッダーが正しく渡されていなかったので、そうアプリがリダイレクトしたいターゲットの推測することができます私はログインするために。私は手動で私は複数のチュートリアルを試してみました

​​

受信

xhr.setRequestHeader("Authorization", "Bearer " + token); 

追加し、そのようなヘッダを追加しようとするでしょう場合は、実際に何Authorizationヘッダが...

を要求中でない(つまり、このarticle)、しかし、常にいくつかのnugetパッケージをロードするバックエンドコードがあります - 私はhtml + jsしか持っていません。

デッドエンド。どのようにそれを動作させるためのアイデアですか?それも可能ですか?

+0

(JS + HTML)? Azure上にある場合は、Azure App設定でCORSを有効にしてみてください。 –

+0

最初のリクエストでは、リクエストが認証されていないため、リダイレクトを受信して​​います。 Azure ADは、ドメイン間の要求を許可していないため、401ステータスコードを返すようにアプリを設定することは意味をなさないかもしれません。あなたの2番目のものも動作しないので、JWTベアラトークンを使用するように認証を設定していない可能性がありますか?ここに認証設定を追加できますか? – juunas

+0

@PrzemekMarcinkiewicz:CORSは設定されているはずです。ブラウザと同じセッションで直接Webサービスを開くと、すべての認証が処理され、問題なくCORSを作成できます。 – Miguzo

答えて

0

@ juunas:私は非常に同じ推測をしていました。認証とはどういうことかと思います。たぶんadal.jsはそれを正しく処理しないでしょうか?マイ設定 何Authorizationヘッダはすべてのリクエストではありません...そして私の知る限りのadal.jsは、すべての要求を処理し、(http://www.cloudidentity.com/blog/2015/02/19/introducing-adal-js-v1/を経由して)、そのようなヘッダを追加する必要があります:特に、私が書いたように、その

window.config = { 
    instance: 'https://login.microsoftonline.com/', 
    tenant: '<myTenant>', 
    clientId: '<myGuid>', //in old Azure Portal it calls: Client ID. In new Azure Portal it's Application ID' 
    postLogoutRedirectUri: window.location.origin, 
    cacheLocation: 'sessionStorage', // Tried with localStorage as well 
    endpoints: { 
     // The domain of API (requsets are made TO) 
     // And the same client id as above 
     "<myAppUrl>": "<myGuid>" 
    } 
}; 
アプリをホストするん
関連する問題