如何在使用 SAML 和 OIDC 应用时强制用户每次都进行身份验证

有时,你需要确保用户每次访问应用时都进行身份验证,即使他们已有活动会话。这有助于增强安全性或满足合规要求。下面介绍如何为 OpenID Connect(OIDC)和 SAML 应用配置这一行为。


对于 OIDC 应用:使用 prompt=login 参数

OpenID Connect(OIDC)允许你在授权请求中包含 prompt=login 参数来强制用户身份验证。这可确保用户每次访问应用时都会收到登录提示,无论其现有会话如何。

示例:OIDC 授权请求

https://login.microsoftonline.com/common/oauth2/v2.0/authorize
?response_type=code
&client_id=blf6xxxx-xxxx-xxxx-21cd2263xxxx
&redirect_uri=https://jwt.ms
&scope=openid profile User.Read
&prompt=login

关键参数说明

  • response_type=code:指定授权码流程。
  • client_id:应用的唯一标识符。
  • redirect_uri:身份验证后将用户重定向到的 URI。
  • scope:定义应用请求的权限。
  • prompt=login:强制用户每次都进行身份验证。

对于 SAML 应用:使用 ForceAuthn 属性

在 SAML 中,你可以通过将 ForceAuthn 属性设置为 true 来在身份验证请求中实现相同效果。这会指示身份提供程序(IdP)要求用户进行身份验证,即使他们已有活动会话。

示例:SAML 身份验证请求

<samlp:AuthnRequest 
    xmlns="urn:oasis:names:tc:SAML:2.0:metadata" 
    ID="C2d2FH4oiJ5kL6mN7oPQgR9tOUvIw" 
    Version="2.0" 
    IssueInstant="2013-03-18T03:28:54.1839884Z" 
    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
    <ForceAuthn>true</ForceAuthn>
    <Issuer 
        xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
        https://www.contoso.com
    </Issuer>
</samlp:AuthnRequest>

关键属性说明

  • ForceAuthn=true:确保 IdP 要求用户进行身份验证。
  • Issuer:标识发出身份验证请求的实体。

为什么要强制身份验证?

每次用户访问应用时强制其进行身份验证,在以下场景中会很有益:

  • 增强安全性:防止因会话过期而导致的未授权访问。
  • 合规性:满足频繁身份验证的监管要求。
  • 敏感应用:保护处理关键或机密数据的应用。

结论

无论你使用的是 OIDC 还是 SAML,强制用户身份验证都能确保更高级别的安全性,并更好地控制对应用的访问。对 OIDC 应用使用 prompt=login ,对 SAML 应用使用 ForceAuthn=true ,即可有效实现这一功能。

发表评论