我正在考虑将Microsoft Graph API与个人OneDrive一起使用(通过hotmail帐户而非组织帐户登录!)。
我想创建一个Microsoft Graph客户端实例,并使用具有此类用例的Microsoft Graph API
var expandValue = this.clientType == ClientType.Consumer
? "thumbnails,children($expand=thumbnails)"
: "thumbnails,children";
folder = await this.graphClient.Me.Drive.Root.Request().Expand(expandValue).GetAsync();
要检索访问令牌,我正在使用此article中所述的代码授予流程方法。
正在使用的授权端点
https://login.microsoftonline.com/common/oauth2/v2.0/authorize
正在使用的令牌终结点
正在使用的范围
files.readwrite.all offline_access
使用hotmail帐户登录将返回非JWT令牌
这是此令牌的第一部分
EwBgA8l6BAAUO9chh8cJscQLmU + LSWpbnr0vmwwAAcGxJjYeNNkhw + sJQb2zJ
当尝试使用此令牌创建Microsoft Graph服务客户端实例并使用如上所示的请求时,出现此错误
代码:InvalidAuthenticationToken 消息:CompactToken解析失败,错误代码:8004920A 内部错误: 附加数据: 要求编号:3f472759-9718-47fb-8da0-df1646bb2fe8 日期:2020-05-19T16:42:44 ClientRequestId:3f472759-9718-47fb-8da0-df1646bb2fe8
我尝试将清单中的Azure AD应用程序注册“ signInAudience”参数设置为“ AzureADAndPersonalMicrosoftAccount”和“ PersonalMicrosoftAccount”。前者返回令牌,如上所示,然后在发送请求时失败,而在使用后者登录的观众时,令牌根本不会被检索,实际上没有返回任何额外信息的“错误请求”错误。
使用组织帐户登录时,一切正常。它显示了我组织的OneDrive for Business帐户中的个人文件夹。
此外,如果我改用以下行,我也可以查看组织的OneDrive for business共享文件夹(只需从graphClient之后删除.Me)即可。
folder = await this.graphClient.Drive.Root.Request().Expand(expandValue).GetAsync();
据推测,此article描述了如何获取Microsoft帐户案例的不记名令牌,我最终认为这是我所需要的。
正在使用的授权端点
正在使用的令牌终结点
正在使用的范围
onedrive.readwrite offline_access
使用这种方法仍会返回相同类型的令牌,因此从字面上看,我处于同一情况下。
我还注意到,不鼓励采用后一篇文章中的方法,实际上建议采用第1条中的方法!所以我只是浪费了更多时间:)
个人OneDrive访问(通过Hotmail帐户)必须使用哪种服务/ API?我得到什么样的令牌,该令牌可用于什么用途?我在这里怎么可能做错了?