使用 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 = ..,
});
我已经在 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 = ..,
});