2017-12-16 6 views
0

ios/android用のCordova Appをビルドしました。このアプリは、Azure Active Directoryに接続されたAzureモバイルサービスを使用します。これはうまくいく。ディレクトリ検索を実行しようとすると、Azureがテナントの資格情報を使用して認証するように求められます。Cordova AzureからAzure Web APIを照会する方法

次のステップ:

私たちは、AzureのSQLデータベースにいくつかのC.R.U.Dを持っているいくつかのAPIを持っています。 APIは正常に動作し、https://mat.azurewebsites.net/api/valuesにナビゲートして(安全でない状態で)データを取得します。

ユーザーがADAL Cordovaライブラリを使用して認証した後(うまく動作し、トークンを受け取った後)、Web APIにGETリクエストを実行してデータを返したいと思います。私は問題を抱えて、それ

我々は、同様の質問がHow do I query Azure Web API from Cordova Azure Authenticated app

ここに掲載しかし、無回答が持っているので、APIへのリクエストを作成するかどうかはわかりません場所です

私は複数のapisを呼び出す必要があります.... AngularJs adalでは複数のエンドポイントを渡すことができますが、ここで私たちはどのように渡すことができるか分かりません。

var authority = "https://login.microsoftonline.com/TenantId", 

redirectUri = "https://Mobile", 

resourceUri = "https://graph.microsoft.com" // I am not sure what should be here, 

clientId = "xxxxxxxxxxxxxxx"; 


var url = "https://xxxxx-api.cloudapp.net/v1/purchaseorders? 
$orderby=OrderPlacementDate desc" 

req.open("GET", url, true); 
    req.setRequestHeader('Authorization', 'Bearer ' + 
authResult.accessToken); 
    req.setRequestHeader('XXX.FunctionGroup', 'PurchaseProduct'); 

    req.onload = function (e) { 
     if (e.target.status >= 200 && e.target.status < 300) { 
      app.error('Valid'); 

      app.renderData(JSON.parse(e.target.response)); 
      return; 
     } 
     app.error('Data request failed error: ' + e.target.response + '.......' + e.target.status); 
    }; 
    req.onerror = function (e) { 
     app.error('Data request failed onerror: ' + e); 
    } 

    req.send(); 

@@@@@@ これはあなたがベアラトークンとしてHTTP認証ヘッダーにトークンを渡す必要が認証

authenticate: function (authCompletedCallback) { 

    app.context = new Microsoft.ADAL.AuthenticationContext(authority); 
    app.context.tokenCache.readItems().then(function (items) { 


     if (items.length > 0) { 
      authority = items[0].authority; 
      app.context = new Microsoft.ADAL.AuthenticationContext(authority); 
     } 
     // Attempt to authorize user silently 
     app.context.acquireTokenSilentAsync(resourceUri, clientId) 
      .then(authCompletedCallback, function() { 
       // We require user cridentials so triggers authentication dialog 
       app.context.acquireTokenAsync(resourceUri, clientId, redirectUri) 
        .then(authCompletedCallback, function (err) { 
         app.error("Failed to authenticate: " + err); 
        }); 
      }); 
    }); 

} 
+0

あなたのAPI呼び出しでトークンを渡す必要があります。 – singh

+0

例がありますか?質問の説明に少しだけコードを追加しています。 –

+0

var mytoken = "token get"を設定してから、apiurl/endpoint?token = mytokenなど何か他の作業が必要です。これは、検証トークンを取得している場合に検証します。私はあなたがどこかで失敗しているベアラーを割り当てるときに疑念を抱いています。 – singh

答えて

-1

ためのコードです。 "Bearer TOKEN"の形式で

郵便配達でhttpコールアウトをテストするには、HTTP GETリクエストを使用して、アプリケーションからのトークンをトークンの前に「ベアラ」が付いた認証ヘッダーにコピーします。

// Makes an API call to receive the user list 
requestData: function (authResult, searchText) { 
    var req = new XMLHttpRequest(); 
    var url = resourceUri + "/" + authResult.tenantId + 
"/users?api-version=" + graphApiVersion; 
    url = searchText ? url + "&$filter=mailNickname eq '" + 
searchText + "'" : url + "&$top=10"; 

    req.open("GET", url, true); 
    req.setRequestHeader('Authorization', 'Bearer ' + 
authResult.accessToken); 

    req.onload = function(e) { 
     if (e.target.status >= 200 && e.target.status < 300) { 
      app.renderData(JSON.parse(e.target.response)); 
      return; 
     } 
     app.error('Data request failed: ' + e.target.response); 
    }; 
    req.onerror = function(e) { 
     app.error('Data request failed: ' + e.error); 
    } 

    req.send(); 
}, 

https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-devquickstarts-cordova

+0

私はセキュリティ保護されていないAPIを呼び出すと思っていたので、それは私が404を取得している理由です(しかしこれは推測です)...誰かが私がコールするか、特にAndroidアプリの非セキュアAPIからのデータ –

+0

APIが保護されていない場合、Authorizationリクエストヘッダーは無視されます。私は404が間違ったURLに起因すると思われます。あなたのURLのクエリーストリングセクションが正しいと確信していますか? $ orderby = OrderPlacementDate desc –

+0

はい...私は、コードバスプラグインホワイトリストを追加した後で、それを把握して解決するSSLのために404を取得していました。今私は複数のresoureuri(同じテナント内)を持っているので、トークンを生成する最良の方法は何かを知りたいと思います。説明にコードを追加しました。ループ内にコードを追加する必要がありますか... ...? –

関連する問題