gpt4 book ai didi

azure-ad-b2c - 在 Azure AD B2C 中为电子邮件本地帐户设置显示名称/用户名?

转载 作者:行者123 更新时间:2023-12-04 05:27:53 24 4
gpt4 key购买 nike

我是 Azure AD B2C 的新手,并且已经设置了一个使用本地帐户(仅限电子邮件)正确进行身份验证的站点。当验证请求返回时,我看到“电子邮件”声明下的电子邮件地址,但“名称”声明返回为“未知”。

在 Azure 门户中查看,帐户已创建,但名称未设置,并且对于所有注册用户来说都是“未知”。这不是我所期望的。我希望默认情况下将“名称”设置为电子邮件地址,以便在门户中更容易找到该帐户,因为我们根本没有为此帐户类型收集“显示名称”(用户已经输入给定和姓氏)。

我是否配置不正确,有没有办法将用户名默认为本地、仅电子邮件帐户的电子邮件地址?

最佳答案

Azure AD B2C 不会“自动填充”任何字段 .

当您设置注册策略或统一注册/登录策略时,您可以选择注册属性。这些是向用户显示供他/她提供并随后存储在 Azure AD B2C 中的属性。

没有提示用户输入的任何内容都留空 或在一些选择的情况下(如您观察到的名称)设置为“未知”。

Azure AD B2C 无法假设使用 预先填充给定属性的内容。 .虽然您可能会发现使用电子邮件作为名称的默认值是可以接受的,但其他人可能不会。另一个例子,对于某些人来说,显示名称可以预先填充“{Given name} {Surname}”,但对于其他人,它是“{Surname, Givenname}”的另一种方式。

您实际上要求的是一种为某些属性配置默认值的简单方法,这些属性目前不可用。您可以在 Azure AD B2C UserVoice forum 中请求此功能.

这个时候,你有两个选择:

  • 强制您的用户明确提供此值 通过在您的策略中选择它作为注册属性。
  • 添加一些代码,使用您想要的任何逻辑更新这些属性 (例如在处理新注册的 Controller 中或通过定期运行的 headless 客户端)。

  • 这是您可以使用的 .Net 代码的快速和脏片段(假设您想在身份验证管道 (Startup.Auth.cs) 中执行此操作):

    private async Task OnSecurityTokenValidated(SecurityTokenValidatedNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification)
    {
    try
    {
    var userObjectId = notification.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier")?.Value;

    // You'll need to register a separate app for this.
    // This app will need APPLICATION (not Delegated) Directory.Read permissions
    // Check out this link for more info:
    // https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet
    var authContext = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext(string.Format(graphAuthority, tenant));
    var t = await authContext.AcquireTokenAsync(graphResource, new ClientCredential(graphClientId, graphClientSecret));

    using (var client = new HttpClient())
    {
    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + t.AccessToken);

    var url = graphResource + tenant + "/users/" + userObjectId + "/?api-version=1.6";
    var name = "myDisplayName";
    var content = new StringContent("{ \"displayName\":\"" + name + "\" }", Encoding.UTF8, "application/json");
    var result = await client.PostAsync(url, content);
    }
    }
    catch (Exception ex)
    {
    Console.WriteLine(ex.ToString());
    }
    }

    当您像这样设置 OpenIdConnectAuthenticationOptions 时,您将引用此方法:

    new OpenIdConnectAuthenticationOptions
    {
    // (...)
    Notifications = new OpenIdConnectAuthenticationNotifications
    {
    AuthenticationFailed = OnAuthenticationFailed,
    SecurityTokenValidated = OnSecurityTokenValidated,
    },
    // (...)
    };

    关于azure-ad-b2c - 在 Azure AD B2C 中为电子邮件本地帐户设置显示名称/用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42207608/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com