Использование MSAL (https://github.com/AzureAD/microsoft-authentication-library-for-js), Я настраиваю следующее обещание приобрести токен-носитель для фиктивного веб-сервиса, который я размещаю локально. Веб-сервис захочет проверить токен и проверить, действительно ли пользователь авторизован для выполнениязапрашиваемое действие.
Мой код работает. Проблема в том, что токен ответа почти не содержит информации о моем тестовом пользователе:
{
"displayableId":"Test@***.onmicrosoft.com",
"name":"Test",
"identityProvider":"https://login.microsoftonline.com/***/v2.0",
"userIdentifier":"YWQ0ZGMwNGYtNDJ5YS00M2UxLThiNzQtODA0NGViMPQ1YTBm.NDIxZTU2MTgtYmUxZi00ODQxLWI4Y2EtOWY2Yzk2NjI5ZTNk",
"idToken":{
"aud":"***",
"iss":"https://login.microsoftonline.com/***/v2.0",
"iat":1557243071,
"nbf":1557243071,
"exp":1557246971,
"aio":"ATQAy/8LABAAVQdinYXB41xOA72HZ6VpxlQrDZcePT+Jg9addNIKH5yj9+nsprh/MY6WJAZULvUW",
"name":"Test",
"nonce":"75e63b59-cdd4-4fz5-aa97-a117569e51ed",
"oid":"ad4dc04f-z29a-43e1-8b74-8044eb1d5a0f",
"preferred_username":"Test@***.onmicrosoft.com",
"sub":"fVhbL_d3Kz0TBBGHTKxGpm9B-ON9ZXub6E6ONbBaWRo",
"tid":"421e5418-be1f-4841-b8ca-9f6c96629e3d",
"uti":"hpklIRLfCEqTCSDTAjiVAA",
"ver":"2.0"
}
}
Код:
this.authService.acquireTokenSilent(["https://test.onmicrosoft.com/test/test.scope", "email", "profile" /*"email", "profile", "openid", "roles", "wids", "groups"*/], "https://login.microsoftonline.com/common/").then(function(token) {
var xhttp = new XMLHttpRequest();
console.log(token);
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText);
}
};
xhttp.open("GET", "https://localhost:5001/api/values", true);
xhttp.setRequestHeader('Access-Control-Allow-Headers', '*');
xhttp.setRequestHeader('Access-Control-Allow-Methods', '*');
xhttp.setRequestHeader('Access-Control-Allow-Origin', 'http://localhost:4200');
xhttp.setRequestHeader('Authorization','Bearer ' + token);
xhttp.send();
console.log("sending " + token)
}, function(err) {
console.log(err);
});
IВ моем ответе почти нет информации. Я спрашиваю электронную почту и профиль, и я не получаю эту информацию. Я также не получаю объем, о котором я просил, отозвался в моем ответе! Какая в этом польза?я делаю что-то не так? Пользователь аутентифицирован , и я могу, по крайней мере, быть уверенным в его личности, но это не очень хорошо в действительности санкционирует его запрос! Должен ли я выполнять дополнительную работу на стороне APIи использовать Microsoft Graph API для извлечения всей его пользовательской информации? Но тогда как мне проверить, чтобы полученный токен был аутентифицирован по требованию?стед сфера?Что я здесь не так понимаю?
Допустим, он запросил токен для https://test.onmicrosoft.com/test/test_123.scope вместо этого?Как бы я узнал разницу в качестве потребляющего API?Единственное, что я знаю, как делать на стороне веб-службы, - это использовать JwtSecurityTokenHandler для проверки токена против эмитента https://login.microsoftonline.com//v2.0