如何使用C#REST API生成承载令牌使用承载令牌进行身份验证?

时间:2018-01-15 12:23:35

标签: azure azure-cosmosdb azure-webjobs

我正在尝试创建webjob以执行令牌结束点并生成承载令牌并执行Graph End Point to Query图表?我怎样才能使用C#REST Api实现同样的目标?什么是令牌终点?以下是Postman工具中生成的令牌的屏幕截图。

enter image description here

1 个答案:

答案 0 :(得分:4)

  

什么是令牌终点?

https://login.windows.net/<tenant-id>/oauth2/token
  

如何使用C#REST Api实现相同的目标?

如果要在Azure AD OAuth中使用资源所有者密码凭据授予,您可以从此blog获得答案。以下是博客的摘录。

注意:

  1. 此外,请注意资源所有者密码授予不提供同意,不支持 MFA
  2. 请使用原生 Azure AD application进行测试。
  3. 将用户添加为应用程序所有者
  4.   

    以下是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"];
        }
      }
    }
    

    enter image description here

    <强>更新

    根据您的评论,我还使用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"];
    

    测试结果: enter image description here