1

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

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

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

非常感激!

4

1 回答 1

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 = ..,
    });
于 2019-11-15T13:24:31.207 回答