如何在使用 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 ,即可有效實現此功能。

發表留言