使用仅限App的访问令牌,访问令牌(jwt)如下所示
...
"aud": "https://{tenant}-my.sharepoint.com/",
...
"roles": [
"User.Read.All",
"TermStore.Read.All",
"Sites.Read.All"
],
...
然后使用curl
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/”的子集。
App-Only如何访问令牌读取OneDrive?
此外,Azure的Web应用程序中“Office 365 Internet Online”的“应用程序权限”和“委派权限”中的“必需权限”不同,因为“应用程序权限”没有“文件读取”。这个许可是否重要?
答案 0 :(得分:1)
" OneDrive Business" API需要appidacr
值为2的令牌。
0 =公共客户端
1 =由其身份和秘密识别的客户
2 =由其证书识别的客户
评论中提到的1
的值表示使用了id / secret而不是使用证书。要为您的应用程序设置证书,请按these instructions,然后您可以使用以下代码获取令牌:
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/
引自此来源:
POST https://login.windows.net/contoso.onmicrosoft.com/oauth2/token
HTTP / 1.1 内容类型:application / x-www-form-urlencoded
client-request-id:a2ef0cd8-60e5-4620-ac66-6f2a344e075b
return-client-request-id:true 主持人:login.windows.net
内容长度:986
期待:100-继续
连接:Keep-Alive资源= HTTPS%3A%2F%2Fcontoso.onmicrosoft.com%2FTodoListService&安培; CLIENT_ID = 82692da5-a86f-45c9-9d53-2f88d51b478b&安培; client_assertion_type =瓮%3Aietf%3Aparams%3Aoauth%3Aclient断言型%3Ajwt承载& client_assertion = eyJhbGciOi [......很多东西......] -j5UBo1A& grant_type = client_credentials
这里要注意的主要事项:
1)它是对令牌端点的POST 2)它是一个client_credentials授权,如预期的那样 3)你需要指定为client_assertion_type的魔术值urn:ietf:params:oauth:client-assertion-type:jwt-bearer另一个值得关注的是client_assertion本身,它是证书实际发挥作用的工件:它是一个断言,您需要创建并签署您注册为应用程序凭据的证书。如果你想直接在协议级别工作,ADAL会为你做这件事。
请点击链接,了解有关如何生成用于断言的JWT的详细信息。
更新2
James找到了更好的资源 - 请查看this link以获取有关如何使用Azure AD手动执行证书身份验证的分步说明。