【问题标题】:How can i get List of users from Azure AD?如何从 Azure AD 获取用户列表?
【发布时间】:2020-09-23 08:32:05
【问题描述】:

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

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

【问题讨论】:

标签: c# asp.net-core model-view-controller azure-active-directory


【解决方案1】:
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();

        }
    }
}

更新

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

你可以直接下载这个项目

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

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

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

这是一个仅页面列出广告用户的示例。只需将以下访问令牌放入 var accessToken="your access token****** "***;你可以运行它。

<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>

【讨论】:

  • 当使用 ClientCredentialProvider 时,它会在参数上给出错误“字段初始化程序无法引用非静态字段、方法或属性 'Program.confidentialClientApplication'”我真的很感谢你,如果你能做一个简单解释一下我们在这里做什么会很棒:)
  • @RicardoFigueiredoR 嗨,对不起,这是一个控制台 c# 程序,它可以列出广告用户,但您的请求是 asp.net core mvc ......我正在努力实现它....
  • 是的,我在控制台应用程序中尝试过,但它确实有效......但我真正需要的是在 Asp.net 核心 MVC 中,我已经阅读了很多,我必须注册我的应用程序天蓝色的权利,我认为并且我已经做到了,但之后不知何故变得复杂
  • @RicardoFigueiredo 嗨,这是一个使用微软graph调用日历视图但不列出广告用户的例子,对于asp.net core mvc我不是很熟悉所以花了很多时间。如果觉得有用,可以采纳作为答案,非常感谢。也可以参考这个docs.microsoft.com/en-us/graph/tutorials/aspnet-core
  • 由于使用Graph API获取用户存在限制,是否能够获取所有用户或仅获取前999名用户?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
相关资源
最近更新 更多