Office JS getAccessTokenAsync发送错误的身份验证URL

时间:2018-02-05 08:27:47

标签: office365 office-js

使用OfficeJS API的getAccessTokenAsync方法我试图获取访问令牌。但是在使用开发者工具进行调查之后 - > network我收到了getAccessTokenAsync回调中被触发的请求。当我将它与手动构建的工作URL进行比较时,我发现一些参数完全不同。例如,第一个网址中的ID bc59ab01-8403-45c6-8796-ac3ef710b3e3是错误的,应该是bc59ab01-8403-45c6-8796-ac3ef710b3e3(此ID在Azure AD和清单中注册)。为什么它生成的URL正在获取我的项目中无处可用的ID,以及为什么它不起作用?

getAccessTokenAsync生成的请求(无效)

https://login.microsoftonline.com/common/oauth2/authorize?response_type=token&client_id=bc59ab01-8403-45c6-8796-ac3ef710b3e3&resource=api%3A%2F%2Flocalhost%3A3000%2Fc64ded7d-29e6-4083-8afa-351c7a630668&redirect_uri=https%3A%2F%2Foutlook.office.com%2Fowa%2FextSSO.aspx&state=5e7fc82d-190f-4817-8159-25caf2b58687%7Capi%3A%2F%2Flocalhost%3A3000%2Fc64ded7d-29e6-4083-8afa-351c7a630668&client-request-id=32957e85-9ebe-44b9-b8b2-d67ec469f19e&x-client-SKU=Js&x-client-Ver=1.0.15&prompt=none&login_hint=<myEmail>&domain_hint=<domain>

手动构建(工作)

https://login.microsoftonline.com/<nameOfCompany>.onmicrosoft.com/oauth2/v2.0/authorize?client_id=c64ded7d-29e6-4083-8afa-351c7a630668&response_type=token&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2F&scope=https://graph.microsoft.com/user.read%20https%3A%2F%2Fgraph.microsoft.com%2Fmail.read&response_mode=fragment&state=12345&nonce=678910

manifest.xml中的WebApplicationInfo元素

<WebApplicationInfo>
    <Id>c64ded7d-29e6-4083-8afa-351c7a630668</Id>
    <Resource>api://localhost:3000/c64ded7d-29e6-4083-8afa-351c7a630668</Resource>
    <Scopes>
        <Scope>files.read.all</Scope>
        <Scope>profile</Scope>
    </Scopes>
 </WebApplicationInfo>

1 个答案:

答案 0 :(得分:1)

这有点太复杂了,无法发表评论,所以我现在就回答。

  1. 请澄清“不工作”的含义。 getAccessTokenAsync返回了什么错误?

  2. 在我看来,您的手动请求正在为加载项(c64ded7d-29e6-4083-8afa-351c7a630668)获取MS Graph的访问令牌。这与getAccessTokenAsync的作用并不相同。 getAccessTokenAsync获取一个访问令牌,该访问令牌为 Office主机提供访问您的加载项。 Office Online客户端ID为bc59ab01-8403-45c6-8796-ac3ef710b3e3,因此预计这是Office将在其请求中使用的客户端ID。 (在文章Create SSO Office Add-ins中搜索该GUID。)另外,请注意c64ded7d-29e6-4083-8afa-351c7a630668在该请求的“资源”的值中,这是预期的,因为您的加载项是资源Office主机需要访问权限。

  3. 要访问 Graph ,您需要服务器端代码交换从getAccessTokenAsync获得的令牌,以获取一个访问令牌,该令牌可以提供您的添加在中使用“代表”流程访问 MS Graph。在该事务中,您的加载项是客户端,Graph是资源。有关详细信息,请参阅文章SSO in Office Add-ins