Microsoft graph api OneDrive—正确的Oauth、作用域和服务端点组合

Microsoft graph api OneDrive—正确的Oauth、作用域和服务端点组合,microsoft-graph-api,onedrive,Microsoft Graph Api,Onedrive,我的要求是使用我的应用程序访问用户的OneDrive帐户(即能够读取/写入我的应用程序文件夹),并获取用户信息(姓名/电子邮件),我已注册我的应用程序。。。这似乎很有效,因为当我尝试登录到我的帐户时,我可以批准我的作用域。我在将代码转换为访问令牌时遇到问题,或者在某些情况下,当我获得访问令牌时,它对于我使用的服务端点无效。我一直在处理以下各种组合: Oauth Options (Code Flow): https://login.microsoftonline.com/common/o

我的要求是使用我的应用程序访问用户的OneDrive帐户(即能够读取/写入我的应用程序文件夹),并获取用户信息(姓名/电子邮件),我已注册我的应用程序。。。这似乎很有效,因为当我尝试登录到我的帐户时,我可以批准我的作用域。我在将代码转换为访问令牌时遇到问题,或者在某些情况下,当我获得访问令牌时,它对于我使用的服务端点无效。我一直在处理以下各种组合:

Oauth Options (Code Flow): 
    https://login.microsoftonline.com/common/oauth/v2/authorize
    https://login.live.com/oauth20_authorize.srf
Scopes Varients (With/Without endpoint prefix):
    Files.ReadWrite.AppFolder
    OneDrive.AppFolder
Service Endpoints:
    https://graph.microsoft.com/
    https://api.onedrive.com/
我最新的是与第一个选项从上面。。。但即使它在要求我批准范围并提供代码时认可了我的应用程序。。它说它在试图将代码转换为令牌时无法识别我的应用程序:

{“错误”:“未经授权的客户端”,“错误描述”:“AADSTS70001: 在中找不到标识符为“00000000 48240701”的应用程序 目录9188040d-6c67-4c5b-b112-36a304b66dad\r\n空间ID: 87f0c3e6-0d9f-4ccf-b3e9-c7d43b422800\r\n相关ID: 7f440db6-eba9-4a0c-8d1f-54ae5c21d0cd\r\n时间戳:2018-08-30 16:12:38Z,“错误代码”:[70001],“时间戳”:“2018-08-30” 16:12:38Z,“跟踪id”:“87f0c3e6-0d9f-4ccf-b3e9-c7d43b422800”,“相关性id”:“7f440db6-eba9-4a0c-8d1f-54ae5c21d0cd”}

有人能推荐我应该关注的正确选项吗

我当前的代码声明:

private static String sClientID = "75417aa8-5567-4095-97fa-e09da6e1d8fb";
private static String sClientSecret = "LzAmOFF13Hgzob ... ";
private static String sCodeURL  = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=%s&scope=%s&response_type=code&state=%s&redirect_uri=%s";
private static String sScope = "https://graph.microsoft.com/User.Read https://graph.microsoft.com/Files.Read https://graph.microsoft.com/Files.ReadWrite.AppFolder";
private static String sTokenURL = "https://login.microsoftonline.com/common/oauth2/v2.0/token";
private static String sTokenArgs = "code=%s&grant_type=authorization_code&client_id=%s&client_secret=%s&redirect_uri=%s";
private static String sAPIRootURL = "https://graph.microsoft.com/v1.0";
插入URL时,所有参数都是URL编码的

从重定向URI中删除查询参数解决了令牌请求问题。我对授权请求和令牌请求使用了相同的重定向URI。第一个有效的事实让我困惑。我也在使用基于Marc建议的“聚合”应用程序ID。我的第一个api请求仍然出现错误:

我的java代码是:

String _url = sAPIRootURL + "/me/";
u = new URL(_url);
uc = (HttpURLConnection) u.openConnection();
uc.setRequestMethod("GET");
uc.setRequestProperty("Authorization", String.format("Bearer %s", 
mSessionInfo.BearerToken));
uc.setRequestProperty("Content-Type", "application/json");
{“code”:“BadRequest”,“message”:“MIME类型”text/html, image/gif,image/jpeg,*;q=.2,/;q=.2'需要一个“/”字符 在类型和子类型之间,例如“文本/普通”, “内部错误”:{ “请求id”:“f627bd8a-bc3a-4bb4-928a-a0daf7112368”, “日期”:“2018-09-05T01:28:59” }

我验证了令牌请求响应是否包含User.Read范围


您是如何/在哪里注册您的应用程序的?您是在“Azure纯广告应用程序”还是在“聚合应用程序”下注册的?请参阅上面的注册快照。我最初使用了保管库。我添加并尝试了保管库Web,…现在令牌响应中出现错误:“请求中指定的回复url与为应用程序配置的回复url不匹配”,但它调用了我的令牌url…因此我在这里感到困惑。回复url(或重定向Uri)是您托管的Uri。这是它将发送授权代码的位置。然后,您需要将该验证代码发回/Token端点。