当前位置: 首页 > 知识库问答 >
问题:

如何从Azure AD获取自定义属性

印辉
2023-03-14

但是,我只能访问有关用户的基本信息,例如GivenName和Surname。我在Azure门户中创建了名为“extension_e3f9d0....”的扩展属性。

问题是,我不知道如何访问属性,一旦用户登录。当我调用Postman中的API时,可以检索这些自定义属性,如下所示:

https://graph.microsoft.com/v1.0/users/[user@whatever]?$select=extension_e3f9d0...

async static void GetRequest(string url)
    {
        Summary summary = new Summary();
        using(HttpClient client = new HttpClient())
        {
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", How do I get the user's accesstoken here?);
            using (HttpResponseMessage response = await client.GetAsync("https://graph.microsoft.com/v1.0/users/[user@whatever]?$select=extension_e3f9d0"))
            {
                using(HttpContent content = response.Content)
                {
                    string myContent = await content.ReadAsStringAsync();
                    System.Diagnostics.Debug.WriteLine("CONTENT " + myContent);
                }
            }
        }
    }
// The Client ID (a.k.a. Application ID) is used by the application to uniquely identify itself to Azure AD
string clientId = System.Configuration.ConfigurationManager.AppSettings["ClientId"];

// RedirectUri is the URL where the user will be redirected to after they sign in
string redirectUrl = System.Configuration.ConfigurationManager.AppSettings["redirectUrl"];

// Tenant is the tenant ID (e.g. contoso.onmicrosoft.com, or 'common' for multi-tenant)
static string tenant = System.Configuration.ConfigurationManager.AppSettings["Tenant"];

// Authority is the URL for authority, composed by Azure Active Directory endpoint and the tenant name (e.g. https://login.microsoftonline.com/contoso.onmicrosoft.com)
string authority = String.Format(System.Globalization.CultureInfo.InvariantCulture, System.Configuration.ConfigurationManager.AppSettings["Authority"], tenant);

/// <summary>
/// Configure OWIN to use OpenIdConnect 
/// </summary>
/// <param name="app"></param>
public void Configuration(IAppBuilder app)
{
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

    app.UseCookieAuthentication(new CookieAuthenticationOptions());
    app.UseOpenIdConnectAuthentication(
        new OpenIdConnectAuthenticationOptions
        {
            // Sets the ClientId, authority, RedirectUri as obtained from web.config
            ClientId = clientId,
            Authority = authority,
            RedirectUri = redirectUrl,

            // PostLogoutRedirectUri is the page that users will be redirected to after sign-out. In this case, it is using the home page
            PostLogoutRedirectUri = redirectUrl,

            //Scope is the requested scope: OpenIdConnectScopes.OpenIdProfileis equivalent to the string 'openid profile': in the consent screen, this will result in 'Sign you in and read your profile'
            Scope = OpenIdConnectScope.OpenIdProfile,

            // ResponseType is set to request the id_token - which contains basic information about the signed-in user
            ResponseType = OpenIdConnectResponseType.IdToken,

            // ValidateIssuer set to false to allow work accounts from any organization to sign in to your application
            // To only allow users from a single organizations, set ValidateIssuer to true and 'tenant' setting in web.config to the tenant name or Id (example: contoso.onmicrosoft.com)
            // To allow users from only a list of specific organizations, set ValidateIssuer to true and use ValidIssuers parameter
            TokenValidationParameters = new TokenValidationParameters()
            {
                ValidateIssuer = false
            },

            // OpenIdConnectAuthenticationNotifications configures OWIN to send notification of failed authentications to OnAuthenticationFailed method
            Notifications = new OpenIdConnectAuthenticationNotifications
            {
                AuthenticationFailed = OnAuthenticationFailed
            }
        }
    );
}

共有1个答案

毛勇
2023-03-14

要使用Microsoft Graph代表用户读写资源,您的应用程序必须从Azure AD获取访问令牌,并将该令牌附加到发送给Microsoft Graph的请求中。

使用OAuth 2.0授权代码授予流从Azure AD V2.0endpoint获取访问令牌所需的基本步骤如下:

1.用Azure AD注册你的app。

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&scope=user.read%20mail.read

您的应用程序使用在上一步中接收到的授权代码,通过向/tokenendpoint发送POST请求来请求访问令牌。

4.使用访问令牌调用Microsoft Graph。

对于已登录的用户,我使用https://graph.microsoft.com/v1.0/me?$select=surname

var authContext = new AuthenticationContext(authorityString);
var result = await authContext.AcquireTokenByAuthorizationCodeAsync
(
    authorizationCode,
    redirectUri, // eg http://localhost:56950/
    clientCredential, // Application ID, application secret
    "https://graph.microsoft.com/"
);
 类似资料:
  • 当我进入产品编辑页面时,有一个选项卡“属性”。在那里我可以设置属性名及其值。 我假设这就是在Woocommerce上为产品添加自定义属性的方式。 但是如何在循环中得到这个值呢? 我看到人们使用,但它希望我传递分类法和另一个参数数组。分类学是什么?我没有手动添加。论点是什么?

  • 问题内容: 好的,简单的问题,但对我来说很重要。 因此,其他android客户端正在发送此xml消息: 我的听众大致是这样的: 在这种情况下,我想在“ received”元素标签内获取属性“ id”的值。但是我在日志中看到的是这样的: 那么我如何获得“ HVgQw-5”? 更新 其实有些奇怪……我从我的SMACK调试中收到了xmlordinh,如下所示: 但是当我执行message.toXML时,

  • 我在UserProfile中添加自定义字段UserType作为字符串。我想更改我的获取值,并将该值传递到TempData中。 这是我在AccountController上的代码: 我对该方法进行了调试,以下是我掌握的信息: 有人对此有什么解决办法吗?我是ASP. NET的新手,但也许如果我实现自定义成员资格,它会工作,你觉得呢?你能给我一些例子吗?谢谢你们。 解决方案如下: `[HttpPost]

  • 我试图在woocommerce中获得一个特定的自定义属性。我在这个网站上读了很多文章,其中提供了3-5种方法。在尝试了所有方法之后,对我来说唯一有效的方法就是循环所有属性——所有其他属性都不起作用。我有一个名为“pdfs”的自定义属性 以下尝试不起作用:(链接) 这是唯一的一个工作:(链接) 我更希望能够使用第一个选项之一。任何帮助都将不胜感激。谢谢

  • 我们正在从1.3.0升级Spring引导版本。发布到2.3.12。释放。根据旧版本,yml文件使用以下代码片段读取 在src/main/Resources/config/中配置文件 myconf源中的内容。yml 相应的测试类 更改到新版本后,它会抛出一个错误。 如果我删除属性,spring将如何知道类MyConfigProperties必须读取MyConfigSource。yml 另外,在运行测

  • 问题内容: 我正在尝试从我的自定义指令中获取一个 评估的 属性,但是我找不到正确的方法。 我已经创建了这个jsFiddle来详细说明。 我想念什么? 问题答案: 注意:我会找到更好的解决方案来更新此答案。 只要它们仍然相关,我也会保留旧答案以供将来参考。最新最好的答案是第一位的。 更好的答案: angularjs中的指令功能非常强大,但是要花些时间来了解它们背​​后的进程。 创建指令时,angul