Azure B2C 使用 Graph API 登录

Posted

技术标签:

【中文标题】Azure B2C 使用 Graph API 登录【英文标题】:Azure B2C sign in using Graph API 【发布时间】:2019-03-05 21:13:34 【问题描述】:

我是 Azure 的新手,我正在开发一个 WebApi 应用程序,它可以创建/删除/更新和验证 Azure AD B2C 租户上的用户,使用 图 API。我坚持使用 Azure AD B2C 上的身份验证用户。通过以下代码,我成功地创建了用户。

  private async Task<string> CreateUserRequest(string api, string json)
  

    AuthenticationResult result = authContext.AcquireToken(Globals.aadGraphResourceId, credential);
    HttpClient http = new HttpClient();
    string url = Globals.aadGraphEndpoint + tenant + api + "?" + Globals.aadGraphVersion;


    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);
    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
    request.Content = new StringContent(json, Encoding.UTF8, "application/json");
    HttpResponseMessage response = await http.SendAsync(request);

    if (!response.IsSuccessStatusCode)
    
        string error = await response.Content.ReadAsStringAsync();
        object formatted = JsonConvert.DeserializeObject(error);
        throw new WebException("Error Calling the Graph API: \n" + JsonConvert.SerializeObject(formatted, Formatting.Indented));
    

    return await response.Content.ReadAsStringAsync();

现在我需要使用与验证用户相同的方式并获取令牌作为以下代码

现在我需要通过将用户名和密码作为参数传递给上述方式来使用 api 调用登录/登录。

public async Task<string> B2CAuthenticateUser(string userName, string password)

   return await SendGraphValidateUser("/users/" + userName, null);


public async Task<string> SendGraphValidateUser(string api, string query)


  AuthenticationResult result = authContext.AcquireToken("https://graph.windows.net", credential);


  HttpClient http = new HttpClient();


        **Here I need your help**
        > // string url = "https://graph.windows.net/" + tenant + api + "?" +
        > Globals.aadGraphVersion;
        >   // if (!string.IsNullOrEmpty(query))
        >      // 
        >      // url += "&" + query;
        >      //  
        > 
        >    
        >    //HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url);

     request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
     HttpResponseMessage response = await http.SendAsync(request);

        if (!response.IsSuccessStatusCode)
            
               string error = await response.Content.ReadAsStringAsync();
               object formatted = JsonConvert.DeserializeObject(error);
               throw new WebException("Error Calling the Graph API: \n" + JsonConvert.SerializeObject(formatted, Formatting.Indented));
            

    return await response.Content.ReadAsStringAsync();
 

我希望应该有办法做到这一点。如果您能提出一种方法,将不胜感激

PS:我已经解决了以下相关问题,但没有多大帮助] Authenticate a user on Azure AD B2C using Graph API

【问题讨论】:

【参考方案1】:

最好使用a resource owner policy 对用户进行身份验证,这使您自己的应用程序能够验证用户的凭据。

【讨论】:

感谢@Chris,但文档中提到的 POST URL 不正确。我只是重试了一个非常简单的示例,但文件发布的 URL 失败了。它需要更新以包含以下 URL:login.microsoftonline.com/%7Btenant%7D/oauth2/v2.0/…

以上是关于Azure B2C 使用 Graph API 登录的主要内容,如果未能解决你的问题,请参考以下文章

Azure AD B2C 图形 API 401 未经授权

Azure AD B2C 与 ASP.NET Web API 发出令牌,用于 Web API 中的身份验证和访问 MS Graph API

我如何获得Azure Active Directory B2c登录用户角色?

90 天后访问 Azure B2C 登录日志

我应该如何获取 Azure AD B2C 用户的上次登录时间戳?

用于创建和登录 B2C 租户的 Azure 服务主体