【问题标题】:Refreshing user claims dynamically when using itfoxtec-identity-saml2使用 itfoxtec-identity-saml2 时动态刷新用户声明
【发布时间】:2019-11-14 14:23:46
【问题描述】:

我已经在一个 ASP.NET Core 2.2 应用程序中实现了 ITFoxtec Identity SAML2 包,它运行良好!

我们的应用程序要求之一是,当管理用户更改其角色成员资格时,应更新用户的声明(他们所处的角色等) - 从而使他们的 cookie 中的声明“无效”,因此它们必须是更新。 我一直在研究这个主题,我能找到的大部分信息都与管理用户的 ASP.NET Identity UserManager/RoleManager/SecurityStamp/SignInManager 方式有关——我们不使用这种方法,也不打算使用这种方法,因为我们改用 Saml2。

您对如何在某人通过 ITFoxtec-Identity-Saml2 登录后触发索赔刷新而不强制他们实际重新登录有任何建议吗?

非常感谢!

【问题讨论】:

    标签: asp.net-core .net-core claims itfoxtec-identity-saml2


    【解决方案1】:

    恐怕 SAML 2.0 标准不支持您的场景。基本上,SAML 2.0 要求用户重新进行身份验证以加载新的声明。

    根据您使用的 IdP,您可以强制用户重新进行身份验证,从而加载新的声明。

    强制登录:

    var authnRequest = new Saml2AuthnRequest(saml2Config)
    {
        ForceAuthn = true,
        ...
    };
    

    如果 IdP 在没有重新身份验证的情况下加载被动登录请求上的更新声明,则被动登录是一种平滑的解决方案。然后调用 IdP,但用户从未发现它。

    被动登录请求:

    var authnRequest = new Saml2AuthnRequest(saml2Config)
    {
        IsPassive = true,
        ...
    };
    

    或者,您需要实现一个自定义解决方案,其中应用程序调用一个端点,由 SAML 令牌保护。端点查询用户声明,例如。一个数据库并返回更新的声明。如果声明更新,应用程序可以重新登录,我认为无需注销也是可能的。

    类似这样的:

    var principal = new ClaimsPrincipal(...);
    await httpContext.SignInAsync(Saml2Constants.AuthenticationScheme, principal, 
        new AuthenticationProperties
        {
            IssuedUtc = ...,
            ExpiresUtc = ..,
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 2019-08-26
      • 1970-01-01
      相关资源
      最近更新 更多