Active Directory集成应用程序:访问令牌无效

时间:2017-09-10 11:43:03

标签: azure oauth azure-active-directory microsoft-graph

我正在按照本教程(https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-integrating-applications)创建一个OAUTH应用程序,以便将新用户添加到我的Azure云订阅中。

如教程中所述,我已经创建了我的应用程序,分配了权限并执行了创建密钥。

我正在做的事情非常“标准”,但仍无效。

让我展示一下步骤:

 https://login.microsoftonline.com/common/oauth2/authorize?client_id=[CLIENTID]&response_type=code&redirect_uri=[REDIRECT_URI]&prompt=admin_consent

登录我成功转到:

Permission Request

在接受之后我到达我的服务部门,我在代码身份验证中编写了“最后一步”来检索令牌

            var content = new StringContent(
            "grant_type=authorization_code" +
            "&client_id=" + Connectors.Azure.AzureHelper.ID +
            "&client_secret=" + Connectors.Azure.AzureHelper.Secret +
            "&code=" + code +
            "&resource=" + Connectors.Azure.AzureHelper.ID +
            "&redirect_uri=" + Request.Url.AbsoluteUri.Split('?')[0],
            Encoding.UTF8, "application/x-www-form-urlencoded");

            var resp = await client.PostAsync("https://login.microsoftonline.com/common/oauth2/token", content);
            var text = await resp.Content.ReadAsStringAsync();

            var token = JsonConvert.DeserializeObject<Connectors.Office365.AuthResp>(text);

在token.access_token中,我有一个“格式良好”的令牌。

在token.Scopes中,我还有许多“授予权限”,如:

 Directory.AccessAsUser.All Directory.Read.All Directory.ReadWrite.All Group.Read.All Group.ReadWrite.All Member.Read.Hidden User.Read User.Read.All User.ReadBasic.All

但是,如果我尝试执行最简单的操作,如:

Error on get users

这就像我正在检索有效令牌但没有功能! 可能有什么不对?

在“代码确认”的资源字段中,我输入了我的应用程序的ID。那是对的吗? 我还能尝试什么?

1 个答案:

答案 0 :(得分:0)

可能我发现出了什么问题。一切都是关于&#34;资源&#34;令牌请求中的字段。

现在,我的登录网址指定我需要https://graph.api.net的代码:

 var myUrl = "https://login.microsoftonline.com/common/oauth2/authorize?client_id=" + AzureHelper.ID + "&response_type=code&redirect_uri=" + baseUrl + "/Account/OAuth&prompt=admin_consent&resource=" + Uri.EscapeDataString("https://graph.windows.net");

给了我这个网址:

https://login.microsoftonline.com/common/oauth2/authorize?client_id=[ID]&response_type=code&redirect_uri=[URL]&prompt=admin_consent&resource=https%3A%2F%2Fgraph.windows.net

然后,在CODE验证中,我请求相同的资源:

            var content = new StringContent(
            "grant_type=authorization_code" +
            "&client_id=" + Connectors.Azure.AzureHelper.ID +
            "&client_secret=" + Connectors.Azure.AzureHelper.Secret +
            "&code=" + code +
            "&resource=" + Uri.EscapeDataString("https://graph.windows.net")+ //Connectors.Azure.AzureHelper.ID +
            "&redirect_uri=" + Request.Url.AbsoluteUri.Split('?')[0],
            Encoding.UTF8, "application/x-www-form-urlencoded");

            var resp = await client.PostAsync("https://login.microsoftonline.com/common/oauth2/token", content);
            var text = await resp.Content.ReadAsStringAsync();

            var token = JsonConvert.DeserializeObject<Connectors.Office365.AuthResp>(text);

一切都像魅力一样。

我的具体问题是由于在第一次测试中,我试图将Request参数放在不进行URL编码的情况下。

奇怪的是,对于&#34; redirect_uri&#34;当您需要特定的编码时,您不需要特定的编码&#34;请求&#34;