Javascript 使用ADAL.js的JWT受众错误

Javascript 使用ADAL.js的JWT受众错误,javascript,oauth-2.0,azure-active-directory,adal,adal.js,Javascript,Oauth 2.0,Azure Active Directory,Adal,Adal.js,我正在SPA中使用adal angular库(但不使用angular)尝试获取一个访问令牌,我可以使用该令牌调用SharePoint API(https://.sharepoint.com/_api/) 我已经在Azure AD中注册了一个应用程序,并在清单中启用了隐式流,现在我正在本地运行我的SPA,这就是为什么有一个localhost重定向URI。启动时正在执行以下代码: const context = new AuthenticationContext({ clientId: '&

我正在SPA中使用
adal angular
库(但不使用angular)尝试获取一个访问令牌,我可以使用该令牌调用SharePoint API(
https://.sharepoint.com/_api/

我已经在Azure AD中注册了一个应用程序,并在清单中启用了隐式流,现在我正在本地运行我的SPA,这就是为什么有一个localhost重定向URI。启动时正在执行以下代码:

const context = new AuthenticationContext({
    clientId: '<my-client-id>',
    redirectUri: 'http://localhost:3000/signin',
    popUp: true,
    loginResource: 'https://<my-tenant>.sharepoint.com',
    callback: () => window.location.reload()
});

const user = context.getCachedUser();
if (!user) {
    context.login();
} else {
    context.acquireToken('https://<my-tenant>.sharepoint.com', (error, token) => {
        console.log(error, token);
    });
}

我很确定这一切都归结于我没有正确理解OAuth2流,但是。。。如何获取SharePoint可与SharePoint一起实际使用的令牌?我是不是想错了?如果我的应用程序检索到的令牌只能用于对我自己的应用程序进行身份验证,则有点违背了目的。

获取SharePoint访问令牌的详细描述如下:

您应该首先考虑到发现端点的令牌:

使用为资源接收的访问令牌
https://api.office.com/discovery/
您可以向 discovery API以了解哪些服务可用

如果调用成功,响应体将包含带有 有关用户和应用程序可用服务的信息


在那里你应该得到你的有效资源ID。。。但这里的问题可能只是您没有在示例代码中的资源URL末尾包含正斜杠(
/
)。

获取SharePoint访问令牌的详细描述如下:

您应该首先考虑到发现端点的令牌:

使用为资源接收的访问令牌
https://api.office.com/discovery/
您可以向 discovery API以了解哪些服务可用

如果调用成功,响应体将包含带有 有关用户和应用程序可用服务的信息


在那里你应该得到你的有效资源ID。。。但这里的问题可能只是您在示例代码中的资源URL末尾没有包含正斜杠(
/
)。

您将对SharePoint API进行什么类型的调用?您是否考虑过使用“替代”(它确实访问了您的SharePoint资源),并且有更多的文档和示例代码来显示您如何调用它。它可能会做我需要的事情。但是对于令牌访问群体,我不会有同样的问题吗?您可以尝试在资源url的末尾添加一个
/
吗?我现在尝试在末尾添加正斜杠,包括loginResource和请求的资源,但这并没有什么区别-仍然得到相同的受众验证错误。是否有附加的错误消息附在您的错误描述中?仅凭这一点,很难说问题出在哪里。通常,令牌端点会给出更好的错误消息。您将对SharePoint API进行哪些类型的调用?您是否考虑过使用“替代”(它确实访问了您的SharePoint资源),并且有更多的文档和示例代码来显示您如何调用它。它可能会做我需要的事情。但是对于令牌访问群体,我不会有同样的问题吗?您可以尝试在资源url的末尾添加一个
/
吗?我现在尝试在末尾添加正斜杠,包括loginResource和请求的资源,但这并没有什么区别-仍然得到相同的受众验证错误。是否有附加的错误消息附在您的错误描述中?仅凭这一点,很难说问题出在哪里。通常令牌端点会给出比这更好的错误消息。
{"error_description": "Exception of type 'Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException' was thrown."}
{
  "@odata.context": "https:\/\/api.office.com\/discovery\/v1.0\/me\/$metadata#allServices",
  "value": [
    {
      "@odata.type": "#Microsoft.DiscoveryServices.ServiceInfo",
      "capability": "MyFiles",
      "serviceApiVersion": "v2.0",
      "serviceEndpointUri": "https:\/\/contoso-my.sharepoint.com\/_api\/v2.0",
      "serviceResourceId": "https:\/\/contoso-my.sharepoint.com\/"
    }
  ]
}