如何从 Azure AD 获取用户列表?

2024-02-26

我正在使用 asp.net core MVC,我想从 Azure AD 读取用户。我读了很多微软文档,我知道我必须使用 GraphAPI 来做到这一点,但我不知道如何做。现在一切都让我感到困惑。

我不知道在哪里放置代码,我不知道在哪里获取 GraphServiceClient 中给出的 authPROvider。我什至根本不知道那个 authprovider 是什么?! 任何人都可以提供信息和演示代码,以便我能够真正理解如何做到这一点,将不胜感激! :) 感谢所有的帮助!


using Microsoft.Graph;
using Microsoft.Graph.Auth;
using Microsoft.Identity.Client;
using System;

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
                .Create("application id")
                .WithTenantId("tenant id")
                .WithClientSecret("application secret")
                .Build();

            ClientCredentialProvider authenticationProvider = new ClientCredentialProvider(confidentialClientApplication);
            GraphServiceClient graphServiceClient = new GraphServiceClient(authenticationProvider);
            var result = graphServiceClient.Users.Request().GetAsync();
            foreach (var item in result.Result)
            {
                Console.WriteLine(item.DisplayName);
            }

            Console.ReadKey();

        }
    }
}

UPDATE

1.https://github.com/microsoftgraph/msgraph-training-aspnet-core https://github.com/microsoftgraph/msgraph-training-aspnet-core

您可以直接下载该项目

2.https://github.com/microsoftgraph/msgraph-training-aspnet-core/tree/master/demo https://github.com/microsoftgraph/msgraph-training-aspnet-core/tree/master/demo

这是建立上述内容所需的文件。

3.下面的截图是我的一个例子。这个使用microsoft graph的asp.net core mvc项目是可行的。

这是仅页面列表广告用户的示例。只需将以下访问令牌放入var accessToken =“您的访问令牌******”***;然后就可以运行它了。

<html>

    <style>
        .userItem {
          background-color:lightgrey; 
          list-style-type: none;
          margin: 0;
          padding: 0;
        }
        
        .userItem p {
          display: inline-block;
          width:25%
        }

        .LicenseItem {
          background-color: lightgoldenrodyellow;
          margin: 0;
          padding: 0;
          height: 45%;
          overflow: auto;
        }
        
        .LicenseItem p {
          display: inline-block;
          width: 20%;
      
        }
     

        .loadMore {
            background-color: aqua;
            font-style: italic; 
            text-align: center; 
            padding: 15px;
        }
        </style>

    <body>
        <div id="message"></div>
        <div id="userListView">
            <div class="userItem" style="background-color: aqua;font-style: italic;">
                <hr>
                <p> user display name </p>
                <p> user email address </p>
                <p> user principal name </p>  
            </div>
            <div id="userList"></div>
            <div id="loadMore" class="loadmore"></div>
        </div>
    </body>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

    <script>
        var accessToken="your access token*********";
        var ItemView = " <div id='@id' class='userItem'><hr><p id='@id-obj' style='display:none'>@obj</p><p > @displayName </p><p > @mail </p><p > @upn </p></div>"
        function initPage(){
            $("#loadMore").empty();
            $.ajax({
                url: 'https://graph.microsoft.com/v1.0/users?$top=10',
                type: 'get',
                headers: {
                    "Content-type": 'application/json', 
                    "Authorization":"Bearer " + accessToken
                },
                success: function (data) {
                    var userlist = data.value;
                    var nextpageUrl = data['@odata.nextLink'];
                    if(nextpageUrl){
                        $("#loadMore").append("<div onclick='loadMore(\""+ nextpageUrl  +" \")'>load more...</div>");
                    }
                    userlist.forEach(element => {
                        var view = ItemView.replace(/@id/g,element.id).replace("@displayName",element.displayName).replace("@mail",element.mail).replace("@upn",element.userPrincipalName).replace("@obj",JSON.stringify(element));
                        console.log(JSON.stringify(element));

                        $("#userList").append(view);
                    });
                },
                error:function(data){
                    var response = JSON.parse(data.responseText)
                document.getElementById("message").innerHTML="ERROR:" + response.error.message;
                }
            });
        }

        function loadMore(url){

            $.ajax({
                url: url,
                type: 'get',
                headers: {
                    "Content-type": 'application/json', 
                    "Authorization":"Bearer " + accessToken
                },
                success: function (data) {
                    var userlist = data.value;
                    var nextpageUrl = data['@odata.nextLink'];
                    
                    if(nextpageUrl){
                        $("#loadMore").empty();
                        $("#loadMore").append("<div onclick='loadMore(\""+ nextpageUrl  +" \")'>load more...</div>");
                    }
                    userlist.forEach(element => {
                        var view = ItemView.replace(/@id/g,element.id).replace("@displayName",element.displayName).replace("@mail",element.mail).replace("@upn",element.userPrincipalName).replace("@obj",JSON.stringify(element));
                        $("#userList").append(view);
                    });
                },
                error:function(data){
                    var response = JSON.parse(data.responseText)
                    document.getElementById("message").innerHTML="ERROR:" + response.error.message;
                }
            });
        }
        initPage();

    </script>

</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Azure AD 获取用户列表? 的相关文章

随机推荐

  • 如何在 VB.Net 中运行 Powershell 脚本

    我需要在 VB Net 中运行 Exchange 2007 powershell 脚本 但我似乎找不到显示如何在加载模块的情况下执行此操作的方法 做到这一点的最佳方法是什么 您可以在VB中运行powershell脚本 请查看以下链接 htt
  • 单击按钮即可更新 D3 等值线州地图数据

    我使用 d3 datamaps 和 topojson 创建了一个 choropleth 州地图 我在根据按钮单击更改原始地图数据时遇到问题 首选方法是仅在更改函数内刷新原始地图的数据 相反 我让按钮执行函数消除包含地图的 div 然后重新创
  • Sqlite3_step() 在此查询上不断返回 SQLITE_MISUSE。有什么指点吗?

    我试图在 viewDidLoad 例程中打开一个 sqlite 数据库 并尝试将 sql 查询发送到该数据库 但 sqlite step 每次都会失败 我不确定这里出了什么问题 我只是尝试将其作为 sqlite3 的 hello world
  • 提交响应后 FormResponse.getId() 返回错误值

    我正在编写一个程序 需要各种谷歌表单响应的ID 我的程序首先创建表单对象并获取响应 var form FormApp openByUrl var allResponses form getResponses 如果表单响应是几个小时前的 那么
  • 转换时区时注意夏令时

    我有一个 Redshift 数据表 其中所有时间值都存储在 CST 中 并且我根据邮政编码 位置 将时间值转换为相应的时区 当我这样做时 我知道所有时间值都是标准时间 因此我的函数用法是 CASE WHEN convert timezone
  • 如何矢量化(利用 pandas/numpy)而不是使用嵌套 for 循环

    我希望有效地使用pandas or numpy 而不是嵌套for循环与if解决特定问题的语句 这是一个玩具版本 假设我有以下两个 DataFrame import pandas as pd import numpy as np dict1
  • 无法读取架构文档'http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd

    我正在为大学编写一个简单的 Swing 应用程序 并使用 Hibernate 和 Oracle XE 我被这个错误困住了 29 06 2011 14 54 10 org hibernate cfg annotations Version
  • 放大图像映射的某个区域

    我目前正在尝试制作一个响应式图像地图 我们还可以在其中缩放特定区域 目前我有类似的东西 插图 例如 我有 3 个部分用于 3 个不同的区域 但现在我不想在用户单击特定区域时放大该区域 我已经尝试了一些 jquery 脚本 但问题是它会缩放所
  • 如何隐藏Android手机上的软键栏?

    当我的应用程序启动时 我想隐藏软键栏 红色矩形 以获得更大的屏幕 我怎样才能隐藏它 当应用程序退出时 我是否需要特意显示该栏 或者应用程序退出后它会自动恢复 Android 4 1 手机正面没有硬件按键 我知道已经晚了 但这是正确的答案 所
  • 如何在 Spring Tools Suite 上添加 Spring roo

    我已经安装了 sts 但创建的新 roo 项目不存在 我需要做什么才能添加 spring roo 在以前的版本中我可以创建它 但在 3 5 0 中不行 在 Spring 工具套件中 单击仪表板中的 扩展 链接 搜索 Spring Roo 并
  • “known_hosts”文件中的 ECDSA 条目由哪些部分组成?

    我正在尝试从我的文件中提取 ECDSA 公钥已知主机归档该文件ssh用于验证主机 我下面有一个例子 这是我的known hosts 文件中 127 0 0 1 ecdsa sha2 nistp256 的条目 AAAAE2VjZHNhLXNo
  • Express 应用程序 - 更改基本 url

    我正在构建一个问答应用程序本教程 http engineering paiza io entry 2016 03 10 115345一切顺利 但我需要更改更改通过配置文件提供应用程序的基本根的机会 现在 该应用程序在 localhost 8
  • 使用 jquery 将表单值传递到 iframe 的 src url

    我一直让自己发疯去尝试做看似简单的事情 我有一张表格 我可以在其中询问邮政编码 在您输入邮政编码后 我使用 colorbox 弹出带有 iframe 的灯箱 我需要将表单中的邮政编码值传递到 iframe 的源 URL 中 我的表单代码如下
  • 下拉框显示的高度[重复]

    这个问题在这里已经有答案了 可能的重复 调整下拉框中列表的高度 https stackoverflow com questions 5600646 adjust the height of the list in dropdown box
  • std::set 2D 点的自定义比较器

    我需要一个非重复的 2D 点列表 所以我使用std set具有自定义比较功能 我使用的函数在插入点后出现问题 因为有时std find找不到已经插入的点 const double tolerance 0 1 struct MyPoint2D
  • 从Optional<>转换为ArrayList<>

    我有以下情况 public ArrayList a getMethods return b c test 所以 我的问题是b c test 返回一个值Optional a 作为返回类型 但我需要返回一个ArrayList a 所以 我尝试将
  • 完整原型太大而无法保存,已清除变量

    我在渲染谷歌应用程序引擎代码时遇到此错误 有人知道这个错误吗 你在使用appstats吗 当 appstats 记录有关应用程序的状态时 尤其是在堆栈上存储大量数据时 可能会发生这种情况 它没有害处 但在 appstats 中检查调用时您将
  • 如果焦点是 edittext,则禁止滚动 recyclerview

    我有一个带有水平滚动的回收器视图 recyclerview 中的每个项目都有编辑文本 当我单击 edittext 时 recyclerview 滚动到末尾 我怎样才能禁止滚动 谢谢 您可以在 EditText 上设置焦点事件侦听器以禁用焦点
  • 黑莓 - 应用程序已在商店上架;我可以更改代码签名密钥吗

    不久前 我们为客户构建了一个应用程序 使用我们公司的密钥对其进行签名 并将其放在 BlackBerry App World 商店中 此后我们终止了与客户的合同 他们现在已经对该应用程序进行了进一步的 内部 开发 并要求我们提供签名密钥 以便
  • 如何从 Azure AD 获取用户列表?

    我正在使用 asp net core MVC 我想从 Azure AD 读取用户 我读了很多微软文档 我知道我必须使用 GraphAPI 来做到这一点 但我不知道如何做 现在一切都让我感到困惑 我不知道在哪里放置代码 我不知道在哪里获取 G