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

在使用AzureB2C身份验证服务进行身份验证之前验证电子邮件

盖嘉珍
2023-03-14

情况

我想为我的web应用程序使用Azure B2C身份验证服务。但是,我希望应用程序管理员限制对某些电子邮件或域的访问,例如白名单,如下所示:

  • tom1@abc.com
  • tom2@def.com
  • *@alphabet.com

因此,只有前两封电子邮件和任何以“alphabet.com”结尾的电子邮件才能访问该网站。

问题

我已经实现了所有功能,并且工作正常,但是我正在努力获取经过身份验证的用户的电子邮件地址,以便在登录/登录过程中进行白名单检查。AuthenticationTicket包含所有请求的声明(FirstName、LastName、Name、Object Identifer等),但电子邮件不存在(它已作为声明在Azure B2C中设置)。

我如何访问电子邮件?这是检查的正确位置吗?

启动中的代码。pp.cs

private OpenIdConnectAuthenticationOptions CreateOptionsFromPolicy(string policy)
{
    return new OpenIdConnectAuthenticationOptions
    {
        // For each policy, give OWIN the policy-specific metadata address, and
        // set the authentication type to the id of the policy
        MetadataAddress = String.Format(aadInstance, tenant, policy),
        AuthenticationType = policy,

        // These are standard OpenID Connect parameters, with values pulled from web.config
        ClientId = clientId,
        RedirectUri = redirectUri,
        PostLogoutRedirectUri = redirectUri,
        Notifications = new OpenIdConnectAuthenticationNotifications
        {
            AuthenticationFailed = AuthenticationFailed,
            AuthorizationCodeReceived = (context) =>
            {
                // no claims present here
                return Task.FromResult(0);
            },
            SecurityTokenReceived = (context) =>
            {
                // no claims present here
                return Task.FromResult(0);
            },
            SecurityTokenValidated = (context) =>
            {
                // print all claims - quite a few except email :( Is this where this check should be done?
                foreach (var claim in context.AuthenticationTicket.Identity.Claims)
                {
                    Console.WriteLine(claim.Value);
                }
                return Task.FromResult(0);
            },
        },
        Scope = "openid",
        ResponseType = "id_token",

        // This piece is optional - it is used for displaying the user's name in the navigation bar.
        TokenValidationParameters = new TokenValidationParameters
        {
            NameClaimType  = "name"
        },
    };
}

非常感谢您的帮助。

共有1个答案

郑乐池
2023-03-14

您必须在“选择应用程序声明”刀片的策略中指定要发送到应用程序的声明。

您可以配置此功能的刀片服务器是

Azure广告B2C设置

您应该确保您已经根据下面的屏幕截图选择了email

 类似资料:
  • 如何使用firebase中的验证电子邮件验证使用电子邮件和密码登录的用户?这背后的逻辑是如何工作的,它在代码中会是什么样子? 解决方案/帮助:对于那些仍在寻找答案的人,我找到了这篇文章 堆栈溢出 帖子

  • 我也不会得到一个错误,如果我登录我的电子邮件和密码没有验证电子邮件。 非常感谢你事先的帮助。

  • 在本章中,我们将向您展示如何使用Firebase电子邮件/密码身份验证。 创建用户 要对用户进行身份验证,我们可以使用createUserWithEmailAndPassword(email, password)方法。 例子 (Example) 让我们考虑以下示例。 var email = "myemail@email.com"; var password = "mypassword"; fire

  • 电子邮件验证+电子邮件/密码验证的使用不适用于在用户开始使用服务之前绝对需要电子邮件验证的服务。 让我用Google sign in First的一个例子来解释。 首先,用户登录他们的Google帐户(比如电子邮件是),并授权您的应用程序。然后使用通过它接收到的令牌创建一个凭据,并与Firebase交换这些令牌以将用户登录到Firebase。用户需要存在于Firebase中,您才能使用Fireba

  • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

  • GoogleCredential凭证=newGoogleCredential.Builder(). setTransfer(TRANSPORT). setJsonFactory(JSON_FACTORY). setServiceAccount tId("SOMETHING@developer.gserviceaccount.com"). setServiceAccount tScopes(Bigq