Asp.net core mvc 如何在asp net core mvc应用程序中从my Azure AD B2C获取用户列表?

Asp.net core mvc 如何在asp net core mvc应用程序中从my Azure AD B2C获取用户列表?,asp.net-core-mvc,azure-ad-b2c,azure-ad-graph-api,Asp.net Core Mvc,Azure Ad B2c,Azure Ad Graph Api,如何在asp net core mvc应用程序中从my Azure AD B2C获取用户列表?请参考Azure Graph API 从文件中: Azure Active Directory图形API通过REST API端点提供对Azure AD的编程访问。应用程序可以使用Azure AD Graph API对目录数据和对象执行创建、读取、更新和删除(CRUD)操作。例如,Azure AD Graph API支持用户对象的以下常见操作: 在目录中创建新用户 获取用户的详细属性,例如用户的组 更新

如何在asp net core mvc应用程序中从my Azure AD B2C获取用户列表?

请参考Azure Graph API

从文件中:

Azure Active Directory图形API通过REST API端点提供对Azure AD的编程访问。应用程序可以使用Azure AD Graph API对目录数据和对象执行创建、读取、更新和删除(CRUD)操作。例如,Azure AD Graph API支持用户对象的以下常见操作:

  • 在目录中创建新用户
  • 获取用户的详细属性,例如用户的组
  • 更新用户的属性,例如其位置和电话号码,或更改其密码
  • 检查用户的组成员资格以获得基于角色的访问权限
  • 禁用用户帐户或将其完全删除

下面是一个演示项目,演示如何列出Azure B2C目录中的所有用户:


您可以使用Azure Graph API获取所有用户。在.net core控制台应用程序中尝试以下代码:

using Newtonsoft.Json;
using System;
using System.Net.Http;
using System.Text;

namespace ConsoleApp6
{
    class Program
    {
        static void Main(string[] args)
        {

            var tenantID = "<your tenant ID>";
            var clinetID = "<your app id>";
            var client_secret = "<your app password>";

            HttpClient client = new HttpClient();
            
            //get access token from Azure AD 
            var reqContent = @"grant_type=client_credentials&resource=https://graph.microsoft.com&client_id="+ clinetID + "&client_secret="+ System.Web.HttpUtility.UrlEncode(client_secret);
            var Content = new StringContent(reqContent, Encoding.UTF8, "application/x-www-form-urlencoded");
            var response = client.PostAsync("https://login.microsoftonline.com/"+ tenantID + "/oauth2/token", Content).Result;
            var token = JsonConvert.DeserializeObject<TokenResult>(response.Content.ReadAsStringAsync().Result);
           
            //Use access token to call microsoft graph api 
            client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token.access_token);
            Console.WriteLine(client.GetAsync("https://graph.microsoft.com/v1.0/users").Result.Content.ReadAsStringAsync().Result); 
            
            Console.ReadKey();

        }
    }

    class TokenResult
    {
        public string token_type { get; set; }
        public string expires_in { get; set; }
        public string ext_expires_in { get; set; }
        public string expires_on { get; set; }
        public string not_before { get; set; }
        public string resource { get; set; }
        public string access_token { get; set; }
    }

}
使用Newtonsoft.Json;
使用制度;
使用System.Net.Http;
使用系统文本;
名称空间控制台App6
{
班级计划
{
静态void Main(字符串[]参数)
{
var tenantID=“”;
var clinetID=“”;
var client_secret=“”;
HttpClient=新的HttpClient();
//从Azure AD获取访问令牌
var reqContent=@“授权类型=客户端凭据和资源”=https://graph.microsoft.com&client_id=“+clinetID+”&client_secret=“+System.Web.HttpUtility.UrlEncode(client_secret);
var Content=新的StringContent(reqContent,Encoding.UTF8,“application/x-www-form-urlencoded”);
var response=client.PostAsync(“https://login.microsoftonline.com/“+tenantID+”/oauth2/token”,内容)。结果;
var token=JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result);
//使用访问令牌调用microsoft graph api
client.DefaultRequestHeaders.Add(“授权”、“承载人”+令牌.access_令牌);
Console.WriteLine(client.GetAsync(“https://graph.microsoft.com/v1.0/users).Result.Content.ReadAsStringAsync().Result);
Console.ReadKey();
}
}
类标记结果
{
公共字符串标记\u类型{get;set;}
{get;set;}中的公共字符串过期
{get;set;}中的公共字符串ext_expires_
公共字符串在{get;set;}上过期
公共字符串不在{get;set;}之前
公共字符串资源{get;set;}
公共字符串访问\u令牌{get;set;}
}
}
要运行此代码,您应该在B2C租户中注册一个应用程序,并向其授予读取用户权限: Azure Active Directory=>应用程序注册(旧版)=>新应用程序注册

记下应用程序id并为应用程序创建密码并记下:

clinetID
的值替换为app id,并将
client\u secret
的值替换为密码

授予应用程序的“读取用户”权限:

为应用程序选择权限后,单击“授予权限”按钮。


如果您有任何进一步的问题,请随时告诉我。

Hi@stanley gongyes,非常感谢,这很有帮助。还有其他问题吗。如何在用户处获取IdentityProvider名称?此外,由于某些原因,用户回复中没有他的邮件和其他属性?当然可以,您好@侧码,但您能否尽可能详细地发布另一个问题?一旦我看到,我将在第一时间为您提供帮助。祝您有个美好的一天!