如何获得MSAL令牌响应中的授权范围?

时间:2019-05-07 16:00:59

标签: javascript angular oauth-2.0 openid msal

使用MSAL(https://github.com/AzureAD/microsoft-authentication-library-for-js),我设置了以下承诺,以获取我在本地托管的虚拟Web服务的承载令牌。该Web服务将要验证令牌并检查用户是否实际上有权执行他所请求的操作。

我的代码有效。问题是响应令牌几乎不包含有关我的测试用户的信息:

{  
   "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);
});

我的回复几乎没有任何信息。我要求提供电子邮件和个人资料,但我没有得到该信息。我也没有得到我要求的范围回响!有什么用?我究竟做错了什么?用户 已通过身份验证,我至少可以确定他的身份,但这对实际授权他的请求没有多大好处!我是否应该在API方面做其他工作,并使用Microsoft Graph API提取所有用户信息?但是,如何验证收到的令牌已针对请求的范围进行了身份验证?我在这里误会什么?

让我们说他要求向https://test.onmicrosoft.com/test/test_123.scope发送令牌吗?我如何知道使用API​​的区别?我唯一知道在Web服务端执行的操作是使用JwtSecurityTokenHandler来针对发布者https://login.microsoftonline.com/ / v2.0

验证令牌

0 个答案:

没有答案