使用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
验证令牌