Power Bi Access Token API работает нормально в почтальоне, но не работает в угловом приложении - PullRequest
1 голос
/ 22 октября 2019

Я звоню в power bi API через почтальона, который работает хорошо, и в качестве приемлемого результата я получаю. пока это приложение я звоню в угловое приложение, оно не работает. Я получаю нулевой ответ.

Я приложил свой код ниже. Пожалуйста, помогите мне. Я пытался решить эту проблему в последние несколько дней.

API: https://login.microsoftonline.com/common/oauth2/token

Ниже приведен мой угловой код

getAccessToken(param): Observable<any> {

const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type': 'application/x-www-form-urlencoded',
  })
};

const body = new HttpParams()
  .set('resource', 'https://analysis.windows.net/powerbi/api')
  .set('client_id', 'xxxxxxxxx')
  .set('client_secret', 'xxxxxxxxx')
  .set('grant_type', 'password')
  .set('scope', 'openid')
  .set('username', 'xxxxxxxxx')
  .set('password', 'xxxxxxxxx');

return this.http.post("https://login.microsoftonline.com/common/oauth2/token", body.toString(), httpOptions)
  .pipe(
    map(response => response)
  );}

В приведенном ниже эталонном изображении тот же API, который работает хорошо, но не работает под углом.

enter image description here

Ответы [ 3 ]

0 голосов
/ 22 октября 2019

Вы можете установить заголовок и тело следующим образом:

const httpOptions = {
    headers: new HttpHeaders().set('Content-Type', 'application/x-www-form- 
        urlencoded')
};

const params = {
    resource: 'https://analysis.windows.net/powerbi/api',
    client_id: 'xxxxxxxxx',
    client_secret: 'xxxxxxxxx',
    grant_type: 'password',
    scope: 'openid',
    username: 'xxxxxxxxx',
    password: 'xxxxxxxxx'
}

const body = `resource=${params.resource}&client_id=${params.client_id}&client_secret=${params.client_secret}&grant_type=${params.grant_type}& scope =${params.scope}&username =${params.username}&password =${params.password}`;

return this.http.post("https://login.microsoftonline.com/common/oauth2/token", 
    body, httpOptions)
.pipe(
    map(response => response)
);
0 голосов
/ 24 октября 2019

Я получил проблему и решение.

Проблема:
почему он сломал мой ответ API 'null'. Проблема в том, что из-за CORS я использовал расширение CORS для crome, оно устарело. поэтому он получил результат 'null'

Решение:
Я использовал последнее расширение CORS для chrome, и это временно решило проблему. это не правильное решение, потому что у нас нет права на решение проблемы с корой в бэкэнде. если нам нужно решить это с нашей стороны, тогда нам нужно создать API в .net для получения AccessToken, а затем этот API, который мы можем использовать в Angular.

0 голосов
/ 22 октября 2019

Вы публикуете тело как параметры http. Изменить на:

const body = {
    resource: 'https://analysis.windows.net/powerbi/api',
    client_id: 'xxxxxxxxx',
    client_secret: 'xxxxxxxxx',
    grant_type: 'password',
    scope: 'openid',
    username: 'xxxxxxxxx',
    password: 'xxxxxxxxx'
}

return this.http.post("https://login.microsoftonline.com/common/oauth2/token", body, httpOptions)
  .pipe(
    map(response => response)
  );}
...