阻止用户根据自定义属性值登录

时间:2019-04-11 22:30:47

标签: azure-ad-b2c

我有一个自定义属性,我想在身份验证时使用它。例如,我有另一个状态扩展属性,该属性可以具有可能的值,例如expired / blocked / inactive / active。创建用户时,我将确保为此填充一个值。

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

如果状态为非活动状态,那么我想显示消息为“您的帐户已处于非活动状态超过2年。请使用activate account来激活您的帐户”。我想在此消息中显示链接消息(如果可能)。

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

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

我已经使用下面的链接来实现类似的功能,但是它仅适用于黑白模式,这意味着如果状态为活动状态,则允许登录其他状态的其他状态,它会显示相同的消息。 Prevent/deny login to user based on extension attribute。请不要混淆此链接,因为要求是不同的。

我也想在密码重置策略中使用此额外的验证步骤。事实是,密码重置策略通过接受用户输入来获取更改的密码,但是一旦完成密码更改过程,它就会发出令牌。我的要求是,如果状态已过期/被阻止/处于非活动状态,那么即使更改了密码,他们也将无法登录。

1 个答案:

答案 0 :(得分:0)

所以最终我能够使它工作。感谢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,并将custom属性的值传递给它。基于自定义属性值,我可以简单地返回带有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的帮助。