查询 OneDrive for Business 时"Unsupported app only token"



使用仅应用程序访问令牌,访问令牌(JWT)看起来像

...
"aud": "https://{tenant}-my.sharepoint.com/",
...
"roles": [
    "User.Read.All",
    "TermStore.Read.All",
    "Sites.Read.All"
  ],
...

然后使用卷曲

curl -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization:Bearer {access_token}" 'https://{tenant}-my.sharepoint.com/_api/v2.0/drives/{upn}/root'

返回

"Unsupported app only token."

如果使用用户登录访问令牌,则可以正常工作。

另外,我不能使用" https://graph.microsoft.com/v1.0/drives/{upn }/root/"作为API为" https://{tenant} -my.sharepoint的子集.com/_api/v2.0/".

如何仅应用程序访问令牌读取OneDrive?

此外,在Azure的Web应用程序中,"应用程序许可"one_answers"委托许可"中的"必需权限"在" Office 365 SharePoint Online"中有所不同,因为"应用程序许可"没有"文件读取"。此权限至关重要吗?

" OneDrive Business" API需要一个 appidacr值为2的令牌。

0 =公共客户端
1 =客户ID和秘密确定
2 =由其证书确定的客户

评论中提到的1的值表明使用ID/秘密而不是使用证书。要为您的应用程序设置证书,请遵循以下说明,然后使用以下代码获得令牌:

var context = new AuthenticationContext(authEndpoint); 
X509Certificate2 cert = new X509Certificate2(clientCertificatePfxPath, clientCertificatePfxPassword, X509KeyStorageFlags.MachineKeySet);
ClientAssertionCertificate cac = new ClientAssertionCertificate(ClientId, cert);
var token = context.AcquireToken(audience, cac);

更新1
以下包括一个很好的例子,说明如何在不使用adal的情况下获取令牌:
http://www.cloudidentity.com/blog/2015/02/06/requesting-an-aad-token-with-a-certificate-without-adal/

引用此来源:

发布https://login.windows.net/contoso.onmicrosoft.com/oauth2/token
http/1.1 内容类型:应用程序/x-www-form-urlencoded
client-request-id:a2ef0cd8-60e5-4620-ac66-66-6f2a344e075b
返回 - 诊所重新QUEST-ID:true 主机:login.windows.net
内容长度:986
期望:100 continue
连接:饲养

资源= https%3A%2F%2fcontoso.onmicrosoft.com%2ftodolistService& clibt_id = 82692DA5-A86F-45C9-9D53-9D53-2F88888888D51B478B -type%3AJWT-BEARER& client_assertion = eyjhbgcioi […很多东西…] -j5ubo1a& grant_type = client_credentials

这里要注意的主要内容:
1)这是令牌端点的帖子
2)这是client_credentials赠款,如预期的
3)您需要指定为client_assertion_type魔术值urn:ietf:params:oauth:client-assertion-type:jwt-bearer

另一件事是在client_assertion本身中,这是证书实际发挥作用的工件:这是您需要创建和签名的主张,并以您注册的证书作为申请证书。Adal为您做这件事,如果您想直接在协议级别上工作,则必须自己做。

请按照链接以获取有关如何生成主张的JWT的详细信息。

更新2
詹姆斯找到了一个更好的资源 - 查看此链接,以获取有关如何使用Azure AD手动执行证书验证的分步说明。

最新更新