Получена ошибка при попытке получить токен доступа в nodejs с помощью azure, AADSTS50058: был отправлен запрос на тихий вход, но ни один пользователь не вошел в систему

Я пытаюсь реализовать лазурный вход в приложение планировщика nodejs, а затем хочу загрузить файл для обмена.
Сначала мне нужно войти в систему, затем получить токен доступа, обновить токен, токен доступа администратора и т. Д.
Когда я пытаюсь чтобы получить токен доступа, я получил такую ​​ошибку.
Здесь нет никакого внешнего интерфейса.

URL = 'https://login.microsoftonline.com/' + TENANT_ID + '/ oauth2 / token' ,
Ошибка кода состояния: 400 -
"{" error ":" invalid_grant "," error_description ":" AADSTS50058: был отправлен запрос на тихий вход, но ни один пользователь не вошел в систему. \ r \ nИдентификатор трассировки : 05db5c6a-155c-4870-9bca-a518b5931900 \ r \ nИдентификатор корреляции: 1e8372d0-c1ba-4070-88d7-597e9cb5cb2c \ r \ nTimestamp: 2019-08-14 12: 04: 42Z "," error_codes ": [50058] "timestamp": "2019-08-14 12: 04: 42Z", "trace_id": "05db5c6a-155c-4870-9bca-a518b5931900", "correlation_id": "1e8372d0-c1ba-4070-88d7-597e9cb5cb2c", " error_uri ":" https://login.microsoftonline.com/error?code=50058 \ "}"

Вот код

async function init(parsedBody) {
var jwtToken = await sharepointAuth.getJWTToken(parsedBody);
console.log("jwtToken:",jwtToken)
const config = {
JWK_URI: appConstants.JWK_URI,
ISS: appConstants.ISS,
AUD: appConstants.conf.AUD,
};
console.log(config)
await azureJWT.verify(jwtToken, config).then(async () => {
console.log("----------------------------------")
var fileName = 'analytics.min.js';
var filePath = './public/analytics.min.js';
var userAccessToken = await getAccessToken(jwtToken);
console.log("userAccessToken:", userAccessToken);
var accessTokenObj = await sharepointAuth.getAdminAccessToken();
accessToken = accessTokenObj.access_token;
console.log("accessToken:", accessToken)
fs.readFile(filePath, { encoding: null }, function (err, data) {
const relativeUrl = web/GetFolderByServerRelativeUrl('${selectedFolderName}');
const SHAREPOINT_HEADER = {
'Authorization': Bearer ${accessToken},
"Content-Type": application/json;odata=verbose,
'Accept': 'application/json;odata=verbose',
}
const options = {
method: "POST",
uri: ${SHAREPOINT_URI}${relativeUrl}/Files/add(url='${fileName}',overwrite=true),
headers: SHAREPOINT_HEADER,
body: data
};
console.log(options)
rp(options)
.then(() => {
// POST succeeded...
console.log('File uploaded!');
})
.catch((error) => {
// POST failed...
console.log("File Upload Error: ", error.toString());
});
});
});
}
const request = require("request");
const endpoint = "https://login.microsoftonline.com/tenentId/oauth2/token";
const requestParams = {
grant_type: "client_credentials",
client_id: "ClientId",
client_secret: "Secret",
resource: "ClientId"
};

request.post({ url: endpoint, form: requestParams }, function (err, response, body) {
if (err) {
console.log("error");
}
else {
console.log("Body=" + body);
let parsedBody = JSON.parse(body);
if (parsedBody.error_description) {
console.log("Error=" + parsedBody.error_description);
}
else {
console.log("parsedBody : " + parsedBody);
console.log("Access Token=" + parsedBody.access_token);
init(parsedBody);
}
}
});

function getAccessToken(jwtToken) {
return new Promise(async (resolve) => {
try {
const options = {
method: 'POST',
uri: URL,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
formData: {
grant_type: appConstants.OTB_GRANT_TYPE,
client_id: appConstants.conf.AUD,
client_secret: appConstants.conf.CLIENT_SECRET,
resource: appConstants.OTB_RESOURCE_URI2,
client_assertion_type: appConstants.OTB_CLIENT_ASSERTION_TYPE,
requested_token_use: appConstants.OTB_REQ_TOKEN_USE,
scope: appConstants.OTB_SCOPE,
assertion: jwtToken,
},
};
console.log("options:", options)
await rp(options)
.then(async (parsedBody) => {
// POST succeeded...
const result = JSON.parse(parsedBody);
console.log("****************************************** result", result)
refreshToken = result.refresh_token;

      resolve(result.access_token);
    })
    .catch((error) => {
      // POST failed...
      console.log('getAccessTokenRequestError: ', error.toString());
      resolve(appConstants.ACCESS_TOKEN_ERROR);
    });
} catch (error) {
  console.log('getAccessTokenRequestPromiseError: ', error.toString());
  resolve(appConstants.MIDDLEWARE_ERROR);
}
});
}

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

Сначала мне нужно войти в систему, используя идентификатор клиента и секрет. Затем я получил жетон на предъявителя. то я хочу получить токен доступа, используя токен на предъявителя. В то время я получаю такую ​​ошибку.

AADSTS50058: был отправлен запрос на тихий вход, но ни один пользователь не вошел в систему.


person anfas    schedule 14.08.2019    source источник
comment
Есть ли у вас другие опасения по этому поводу? Если мой ответ полезен, примите его как ответ (нажмите на галочку рядом с ответом, чтобы переключить его с серого на заполненный). Спасибо.   -  person Tony Ju    schedule 29.08.2019


Ответы (1)


Почему бы вам не получить токен доступа таким образом (поток учетных данных клиента)?

const request = require("request");

const endpoint =
  "https://login.microsoftonline.com/{tenant}/oauth2/token";
const requestParams = {
  grant_type: "client_credentials",
  client_id: "",
  client_secret: "",
  resource: "https://mydomain.sharepoint.com"
};

request.post({ url: endpoint, form: requestParams }, function(
  err,
  response,
  body
) {
  if (err) {
    console.log("error");
  } else {
    console.log("Body=" + body);
    let parsedBody = JSON.parse(body);
    if (parsedBody.error_description) {
      console.log("Error=" + parsedBody.error_description);
    } else {
      console.log("Access Token=" + parsedBody.access_token);
    }
  }
});

Если вам нужен токен доступа, содержащий сообщение пользователя для входа, вы можете использовать поток ROPC.

const request = require("request");

const endpoint =
  "https://login.microsoftonline.com/{tenant}/oauth2/token";

const requestParams = {
  grant_type: "password",
  username: "",
  password: "",
  client_id: "",
  resource: "https://mydomain.sharepoint.com"
};

request.post({ url: endpoint, form: requestParams }, function(
  err,
  response,
  body
) {
  if (err) {
    console.log("error");
  } else {
    console.log("Body=" + body);
    let parsedBody = JSON.parse(body);
    if (parsedBody.error_description) {
      console.log("Error=" + parsedBody.error_description);
    } else {
      console.log("Access Token=" + parsedBody.access_token);
    }
  }
});
person Tony Ju    schedule 15.08.2019