Возвращение 401 при использовании токена, сгенерированного через adal.js - PullRequest
0 голосов
/ 07 июля 2019

Я пробую неявный поток, используя adal js.Я создал пробный экземпляр Dynamics 365 и в Azure AD этого экземпляра создал регистрацию приложения.Мое одностраничное приложение выполняет следующее:

Когда пользователь пытается перейти на домашнюю страницу, оно перенаправляет пользователя на https://login.microsoftonline.com/common/oauth2/authorize, где пользователь успешно входит в систему.

Послевойти в систему Я использую getToken для получения токена из класса обслуживания adal.

import {AuthenticationContext, withAdalLogin} from 'react-adal';
import ProjectConstant from './data/projectconstant'

export const authContext = new AuthenticationContext(ProjectConstant.adalSet);

export const acquireToken = (func) => 
    authContext.acquireToken(ProjectConstant.adalSet.endpoints.api, func);

export const getToken = () =>{
    let token = authContext.getCachedToken(ProjectConstant.adalSet.clientId);

    if(authContext.getCachedUser() == null || token == null){
        authContext.login();      
      }

    return authContext.getCachedToken(ProjectConstant.adalSet.clientId);
}

export const withAdalLoginApi = withAdalLogin(authContext, ProjectConstant.adalSet.endpoints.api);

Я использую этот токен для выполнения запроса к экземпляру пробной динамики 365, и мне выдается ошибка 401, код, который делаетвыборка ниже,

export const SearchAccount = () =>{
  var token = getToken(); 
  console.log("Token is" + token );
  let url = "<trial>/api/data/v9.0/accounts";
  fetch(url, { 
      method: 'get', 
      headers: new Headers({
        'Authorization': 'Bearer '+ token, 
        'Accept' : 'application/json',          
        //'Cache-Control' : 'no-cache',
        'Content-Type': 'application/json; charset=utf-8',
        'OData-MaxVersion' : '4.0',
        'OData-Version' :'4.0',
      })})
      .then(result => console.log(result));          
}

Я могу использовать другой браузер и после физического входа в пробный экземпляр, я могу скопировать вставить тот же URL выше в другой вкладке, и он показывает все данные нормально,однако если я сделаю то же самое в браузере, в котором запущено приложение, я получу 401 на новой вкладке.

Я также могу использовать почтальон, выполнив следующие действия, https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/webapi/setup-postman-environment и быть представлен с данными.

Приложение (пользователь) имеет правильный уровень привилегий в экземпляре.Единственное, что отличается в каждом из трех условий - это сгенерированный мной токен, но если токен неправильный, я не должен получить запрещенную ошибку?Я не уверен, что я делаю не так

1 Ответ

0 голосов
/ 08 июля 2019

По какой-то причине токен, возвращаемый authContext.getCachedUser(), дает мне 401. Я просматривал любой соответствующий пост в этой теме и нашел эту статью .Они использовали authContext.acquireToken(organizationURI, fncName) по некоторым причинам.Я использовал то же самое, и, кажется, работает.Я изменил свой getToken() на ниже,

export const getToken = (fnc) =>{
    if(authContext.getCachedUser() == null){
        authContext.login();
    }

    authContext.acquireToken(ProjectConstant.adalSet.endpoints.api, fnc);
}

, и тогда метод поиска становится таким,

export const SearchAccount = (fnc) =>{
  getToken( async(error, token) => {    
    if(error === null && token !== null){

    let url =  ProjectConstant.adalSet.endpoints.api + "/api/data/v9.0/accounts?$select=name,websiteurl,address1_city,address1_country&$top=5";

    fetch(url, { 
        method: 'get', 
        headers: new Headers({
          "Authorization": "Bearer "+ token, 
          "Accept" : "application/json",
          "Content-Type": "application/json; charset=utf-8",
          "OData-MaxVersion" : "4.0",
          "OData-Version" :"4.0",
        })})
        .then(res => res.json())
        .then(res => fnc(res));                
      }
  });

Как я уже сказал, это работает сейчас, но я не уверен, что случилось сболее ранний подход.Любые комментарии по этому поводу будут чрезвычайно оценены.

...