首页 > 解决方案 > 根据自定义属性值阻止用户登录

问题描述

我有一个自定义属性,我想在身份验证时使用它。例如,我有另一个状态扩展属性,它可以有可能的值,如过期/阻塞/非活动/活动。在创建用户时,我将确保为此填充了一个值。

在登录时,我也想考虑这个扩展属性。用户可能输入了正确的密码,但仅仅因为他的扩展属性状态的值是过期/阻止/非活动我想拒绝登录并根据扩展属性的值给出自定义的本地化错误消息。这意味着如果状态已过期,那么我想将消息显示为“您的帐户已过期。请联系 expired-account@xyz.com”。如果状态被阻止,那么我想显示消息“您的帐户已被阻止,请联系您当地的销售代表。

如果状态为非活动状态,那么我想将消息显示为“您的帐户已闲置超过 2 年。请使用激活帐户来激活您的帐户”在此消息中,如果可能,我希望在消息中呈现链接。

我想使用此消息进行本地化。

注意:我正在使用自定义策略。

我已经使用下面的链接来实现类似的东西,但它只适用于黑白模式,这意味着如果状态处于活动状态,则允许其他任何状态登录它显示相同的消息。 根据扩展属性阻止/拒绝用户登录。请不要与此链接混淆,因为要求不同。

我也想在密码重置策略中使用这个额外的验证步骤。问题是密码重置策略通过获取用户输入来更改密码,但是一旦密码更改过程完成,它就会发出令牌。我的要求是,如果状态已过期/被阻止/不活动,那么即使更改了密码,他们也不应该能够登录。

标签: azure-ad-b2c

解决方案


所以最后我能够让它工作。感谢 Chris Padgett ( https://stackoverflow.com/users/7378174/chris-padgett ) 提供的所有帮助和及时回复。

这可以通过在自定义策略中调用 rest api 来实现:这是参考文章 - https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-custom-rest -api-netfw#step-5-add-a-claims-provider

TechnicalProfile Id="LocalAccountSignUpWithLogonEmail":将验证技术配置文件添加到现有技术配置文件(在基本策略中定义)。在注册过程中,验证技术配置文件会调用前面的技术配置文件。如果 RESTful 服务返回 HTTP 错误 409(冲突错误),则会向用户显示错误消息

我所要做的就是调用这个rest api并将自定义属性的值传递给它。基于自定义属性值,我可以简单地返回带有 409(冲突)http 状态代码的响应。响应对象应如下所示:

public class B2CResponseContent
{
    public string version { get; set; }
    public int status { get; set; }
    public string userMessage { get; set; }

    public B2CResponseContent(string message, HttpStatusCode status)
    {
        this.userMessage = message;
        this.status = (int)status;
        this.version = Assembly.GetExecutingAssembly().GetName().Version.ToString();
    }
}

在 userMessage 属性中传递的任何值都将显示给用户。

再次非常感谢@Chris 的帮助。


推荐阅读