我试图弄清楚当向身份提供者(带有证书身份验证的 SAML)进行身份验证时,Google CHrome 从哪里获取我的身份我尝试过的内容:
删除所有 cookie、保存的密码、缓存文件
从我的个人商店中删除我的个人证书(我使用的证书))
在 Firefox 上,如果我刷新页面,这足以让 IDP 注销我并再次提示我输入证书,但在 Chrome 上,它只会让我重新登录!
在 chrome://password-manager-internals/ 上,我可以看到加载密码的过程(我不知道是哪个密码,因为我输入的唯一密码是解密我删除的用户证书的密码!):
Message: PasswordAutofillAgent::DidStartProvisionalLoad
PasswordManager::DidNavigateMainFrame: false
The new state of the UI: 0
Message: PasswordAutofillAgent::SendPasswordForms
only_visible: false
Security origin: https://ADFS-IDP/
Number of all forms: 1
Message: PasswordAutofillAgent::SendPasswordForms
only_visible: true
Security origin: https://ADFS-IDP/
Number of all forms: 1
Form found on page: {
Action : https://ADFS-IDP/ ,
Form name or ID :
}
Form is visible: false
Some control elements not associated to a form element are visible: false
Message: PasswordManager::CreatePendingLoginManagers
Message: PasswordManager::OnPasswordFormsRendered
Message: PasswordManager::IsAutomaticSavePromptAvailable
Message: No provisional save manager
HTML form for submit: {
Action : https://ADFS-IDP/ ,
Form name or ID :
}
我的问题是:Chrome 从哪里获得我的身份,而 Firefox 没有?我猜 Chrome 有许多基于 Windows 的身份验证功能,因为在 Edge 浏览器上也会发生同样的事情,请问有什么想法吗?
SAML 身份验证使用 AD FS 或其他身份提供程序进行 SAML SSO,浏览器本身绝不是 IdP。事实上,Chrome 能够获取 Windows 会话令牌并将其传递给服务提供商 (SP)。SAML 本身不使用证书作为身份,但您的 ADFS 服务器可以。如果您的 ADFS 配置为多种方式来识别用户,即使没有证书也可以。
要使 Azure AD 实现 SSO,使用“ Windows 10 帐户”的特殊加载项。在大多数情况下,许多公司都使用混合身份模式,因此 Azure AD 将用户身份验证用于本地 ADFS。
如果您在私有模式下运行 Chrome,则不会发生 SSO,因为此模式无权访问 Windows 会话上下文。
为了更深入地研究 SAML 身份验证如何在 Chrome 中发生,我建议安装SAML 消息解码器插件。这将为您提供有关 SAML 请求和响应的线索。在请求中,您应该检查saml2p:AuthnRequest和saml2:Issuer。我会查看请求中的AssertionConsumerServiceURL和Destination以确定它的来源。
您还需要检查samlp:Response和它的Issuer。通过 issuer 值,您将了解 IdP 已响应的内容,并且在有效负载的主题会话中,您将看到如何识别用户。