Как получить авторизованные области в ответе токена MSAL? - PullRequest
0 голосов
/ 07 мая 2019

Использование 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

...