2017-02-08 10 views
0

Я могу сделать успешный звонок POSTMAN: /mfp/api/az/v1/token и /mfpadmin/management-apis/2.0/runtimes/mfp/applicationsMFP 8.0 API работает в POSTMAN, но не от AJAX

Я беру токен-носитель, который я получаю от/mfp/api/az/v1/token, и добавляю его в заголовок авторизации для/mfp/applications.

Получаю ответ от 200 и получаю ожидаемую информацию от каждого API.

Я тогда выбрать, чтобы скопировать код АЯКС из POSTMAN для каждого из этих рабочих API-вызовы:

var getBasic = { 
    "async": true, 
    "crossDomain": true, 
    "url": "https://..../mfp/api/az/v1/token", 
    "method": "POST", 
    "headers": { 
     "authorization": "Basic YXBpYzptZnBhcGlj", 
     "grant_type": "client_credentials", 
     "cache-control": "no-cache", 
     "postman-token": "05a672e5-6141-fd6f-82e2-b282d68dce35", 
     "content-type": "application/x-www-form-urlencoded" 
    }, 
    "data": { 
     "grant_type": "client_credentials", 
     "scope": "settings.read" 
    } 
    } 

    $.ajax(getBasic).done(function (response) { 
    console.log(response); 
    var accessToken = response.access_token; 
    console.log(accessToken); 
    var settings = { 
     "async": true, 
     "crossDomain": true, 
     "url": "https://....:8445/mfpadmin/management-apis/2.0/runtimes/mfp/applications", 
     "method": "GET", 
     "headers": { 
     "authorization": "Bearer " + accessToken, 
     "cache-control": "no-cache" 
     } 
     } 
    console.log(settings); 
    $.ajax(settings).done(function (response) { 
     console.log("response: " + response.totalListSize); 
    }); 

    }); 

Однако, когда я запускаю это в моем WebUI я получаю 200 ответа от/маркера , но я получить 401 (неавторизованный) из моего/mfp/приложений

Почему это работает в почтальоне, но не из веб-интерфейса (Chrome)?

+0

Я думаю, вы должны получить маркер доступа с помощью кода, а не просто повторно использовать существующий маркер. Вы пытались получить его по коду? https://mobilefirstplatform.ibmcloud.com/tutorials/en/foundation/8.0/authentication-and-security/privacy-clients/# get-an-access-token –

+0

Я получаю токен-носитель, используя данные getBasic. Когда этот вызов завершен, я получаю access_token из ответа и передаю его в переменную настроек (/ mfp/applications). –

+0

Что вы имели в виду под «Я тогда выбираю, чтобы скопировать код ajax из почтальона»? –

ответ

0

mfpadmin служба и ее конечная точка, что вы используете (applications) делает не требуется маркер доступа в пути, что вы пытались получить. Для этого требуется имя пользователя и пароль для консоли. Таким образом, когда вы используете Bearer access-token, он не работает с 401 unauthorized, потому что это не то, что ожидает сервер, чтобы разрешить доступ к конечной точке applications.

Я сделал следующее:

  1. установлен узел пакетов express и request создать прокси-сервер сортов. Это необходимо, поскольку вы не можете просто сделать запрос AJAX из браузера на сервер (вы получите сообщение об ошибке из браузера, связанный с пересекаться запросами происхождения):

    npm init 
    npm install --save express 
    npm install --save request 
    

    Создано proxy.js (обратите внимание, что это код специфичен для mfpadmin):

    var express = require('express'); 
    var http = require('http'); 
    var request = require('request'); 
    
    var app = express(); 
    var server = http.createServer(app); 
    var mfpServer = "http://localhost:9080"; 
    var port = 9081; 
    
    server.listen(port); 
    app.use('/', express.static(__dirname + '/')); 
    console.log('::: server.js ::: Listening on port ' + port); 
    
    // Reverse proxy, pipes the requests to/from MobileFirst Server 
    app.use('/mfpadmin/*', function(req, res) { 
        var url = mfpServer + req.originalUrl; 
        console.log('::: server.js ::: Passing request to URL: ' + url); 
        req.pipe(request[req.method.toLowerCase()](url)).pipe(res); 
    }); 
    
  2. в ссылке HTML файла Реализации .js файл и JQuery:

    <html> 
        <head> 
         <script src="/jquery-3.1.1.min.js"></script> 
         <script src="/main.js"></script> 
        </head> 
    
        <body> 
    
        </body> 
    </html> 
    
  3. в main.js файл:

    $.ajax({ 
        "crossDomain": true, 
        "url": "http://localhost:9081/mfpadmin/management-apis/2.0/runtimes/mfp/applications", 
        "method": "GET", 
        "headers": { 
         "authorization": "Basic YWRtaW46YWRtaW4=", 
         "Access-Control-Allow-Origin": "*", 
         "cache-control": "no-cache" 
        }  
    }).done(function(response) { 
        console.log(response); 
    }); 
    

    Basic YWRtaW46YWRtaW4= является представление Basic Auth с именем пользователя и паролем adminadmin.

В ответ я получил следующий JSON.
массив items содержит приложения, которые в настоящее время зарегистрированы на сервере MobileFirst.

enter image description here

+0

Будет ли установлен узел node.js на нашем сервере, чтобы он работал? –