我正在按照本教程(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
登录我成功转到:
在接受之后我到达我的服务部门,我在代码身份验证中编写了“最后一步”来检索令牌
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
但是,如果我尝试执行最简单的操作,如:
这就像我正在检索有效令牌但没有功能! 可能有什么不对?
在“代码确认”的资源字段中,我输入了我的应用程序的ID。那是对的吗? 我还能尝试什么?
答案 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;