我正在尝试创建webjob以执行令牌结束点并生成承载令牌并执行Graph End Point to Query图表?我怎样才能使用C#REST Api实现同样的目标?什么是令牌终点?以下是Postman工具中生成的令牌的屏幕截图。
答案 0 :(得分:4)
什么是令牌终点?
https://login.windows.net/<tenant-id>/oauth2/token
如何使用C#REST Api实现相同的目标?
如果要在Azure AD OAuth中使用资源所有者密码凭据授予,您可以从此blog获得答案。以下是博客的摘录。
注意:强>
以下是Azure AD OAuth中资源所有者
所需的参数密码授予。
名称
描述
grant_type - OAuth 2授权类型:密码
resource - 使用令牌的应用程序,例如Microsoft Graph,Azure AD Graph或您自己的Restful服务
client_id - Azure AD中已注册应用程序的客户端ID
用户名 - Azure AD中的用户帐户
密码 - 用户帐户的密码
范围 - 可选,例如openid以获取Id Tok
演示代码:
using (HttpClient client = new HttpClient())
{
var tokenEndpoint = @"https://login.windows.net/<tenant-id>/oauth2/token";
var accept = "application/json";
client.DefaultRequestHeaders.Add("Accept", accept);
string postBody = @"resource=https%3A%2F%2Fgraph.microsoft.com%2F
&client_id=<client id>
&grant_type=password
&username=xxx@xxx.onmicrosoft.com
&password=<password>
&scope=openid";
using (var response = await client.PostAsync(tokenEndpoint, new StringContent(postBody, Encoding.UTF8, "application/x-www-form-urlencoded")))
{
if (response.IsSuccessStatusCode)
{
var jsonresult = JObject.Parse(await response.Content.ReadAsStringAsync());
token = (string)jsonresult["access_token"];
}
}
}
<强>更新强>
根据您的评论,我还使用RestClient进行演示。
var tenantId = "xxxxxx";
var client = new RestClient("https://login.windows.net/");
var request = new RestRequest($"{tenantId}/oauth2/token", Method.POST);
//// easily add HTTP Headers
request.AddHeader("Accept", "application/json");
string postBody = @"resource=https://graph.microsoft.com/&client_id=xxxxx&grant_type=password&username=xxxxx&password=xxxxx&scope=openid";
request.AddParameter("application/x-www-form-urlencoded", postBody, ParameterType.RequestBody); //add request text body
IRestResponse response = client.Execute(request);
var content = response.Content;
var token = JObject.Parse(content)["access_token"];