我正在使用 IdentityModel.OidcClient 根据 Microsoft Entra ID 对 WinForms 应用程序中的用户进行身份验证。我正在使用基于 WebView 的方法。
效果很好。太厉害了。
基本上,登录页面不会询问我的用户名/电子邮件或密码。它只是无缝地(提示..)让我使用我当前登录的 Windows 帐户登录。
我猜测这是因为当前登录到运行 WinForms 应用程序的计算机的 Windows 用户实际上是我尝试进行身份验证的租户中的有效用户。因此,Microsoft 的
Seamless SSO
启动并使用 Kerberos 来对我进行身份验证。这是一个非常酷的功能,但并不总是我想要的。
在某些情况下,我可能想明确选择不同的用户进行登录。 我不想在整个应用程序/租户的 Entra ID 端禁用无缝 SSO,因为在某些情况下,这正是我想要的。 因此,我正在寻找一种方法来明确告诉 WebView 在登录页面发出
Negotiate
质询后不要传递任何 Kerberos 票证。至少我
认为这就是我正在寻找的 - 如果我走错了路,请随时纠正我。 最终结果应如下所示:我的 WinForms 应用程序有一个“登录”按钮和一个“使用当前用户”复选框。单击选中复选框的按钮可以使用无缝 SSO 对我进行身份验证。单击未选中复选框的按钮会导致 Microsoft 登录页面询问我的凭据。
我真的被困在这里了,因为互联网上充满了描述如何让 SSO 工作的内容..关于如何让它
停止工作的内容却很少:D
prompt=login
来处理:
var frontChannelExtraParameters = new IdentityModel.Client.Parameters();
if (!useCurrentUser)
frontChannelExtraParameters.Add("prompt", "login");
var loginResult = await oidcClient.LoginAsync(
new LoginRequest()
{
FrontChannelExtraParameters = frontChannelExtraParameters
}
);