使用 itfoxtec-identity-saml2 时动态刷新用户声明

Refreshing user claims dynamically when using itfoxtec-identity-saml2

我已经在 ASP.NET Core 2.2 应用程序中实施了 ITFoxtec Identity SAML2 程序包,并且运行良好!

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

对于如何在一个人通过 ITFoxtec-Identity-Saml2 登录后触发声明刷新,而不强迫他们实际重新登录,您有什么建议吗?

非常感谢!

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

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

强制登录:

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

OR 被动登录,如果 IdP 在被动登录请求上加载更新的声明而无需重新验证,这是一个顺利的解决方案。然后调用 IdP,但用户永远不会发现它。

被动登录请求:

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

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

像这样:

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