我正在尝试使用adal.js创建一个小型客户端Web应用程序(目前没有角度部分)。
我已登录并获得经过身份验证的用户对象。但是我显然从API中获得了无效的OAuth令牌。
我发送到AuthenticationContext实例的配置:
var config = {
instance: 'https://login.microsoftonline.com/',
tenant: 'dbaa88b3-...',
clientId: 'f81bede8-...',
postLogoutRedirectUri: window.location.href,
cacheLocation: 'localStorage',
};
不确定它是否是租户ID或租户名称?
然后,当我通过身份验证时,我正在使用
var context = new AuthenticationContext(config);
context.acquireToken(context.config.clientId, function(error, token) {
// error is null
var now = new Date();
$.ajax({
url: "https://outlook.office365.com/api/v1.0/me/calendarview",
method: "GET",
data: {
"startdatetime": (new Date()).toISOString(),
"enddatetime": (new Date()).toISOString()
},
headers: {
"Authorization": "Bearer " + token,
"Accept": "application/json; odata.metadata=full",
"Client-Request-Id": clientid, // Some unique machine id?
"User-Agent": navigator.userAgent,
"Date": now.toUTCString()
}
}).then(function(result) {},
function(e) {
console.error(e);
// 401 response, x-ms-diagnostics header = 2000005;reason="The PUID value was not found for [ORGID] identity.";error_category="invalid_user"
});
});
如果我在https://oauthplay.azurewebsites.net/上手动输入使用同一帐户生成的身份验证令牌,则会成功。
答案 0 :(得分:0)
tl; dr 如果您想要访问令牌,请不要将客户端ID作为第一个参数发送到acquireToken
好像我错误地使用了这个库。
当调用acquireToken并且您想要访问令牌时,您不应该将clientId作为第一个参数提供,那么您将获得识别令牌(能够使用http://jwt.io/#工具解决这个问题,谢谢@ rich-randall )。这至少是我解释code的方式。
所以我向API提供了识别而不是访问令牌,它不包含" puid"值,因此错误消息:
// 401 response, x-ms-diagnostics header = 2000005;reason="The PUID value was not found for [ORGID] identity.";error_category="invalid_user"
现在我能够从API中提取数据。