在基于 Webview 的 OpenID Connect 身份验证中禁用 Kerberos

Disabling Kerberos in Webview based OpenID Connect Authentication

提问人:Ar Es 提问时间:11/9/2023 更新时间:11/9/2023 访问量:10

问:

我正在使用IdentityModel.OidcClient根据Microsoft Entra ID对WinForms应用程序中的用户进行身份验证。我正在使用基于 WebView 的方法。

效果很好。太棒了。

基本上,登录页面从不要求我提供用户名/电子邮件或密码。它只是无缝地(提示..)使用我当前登录的 Windows 帐户登录我。

我猜这是因为当前登录到运行 WinForms 应用程序的计算机的 Windows 用户实际上是我尝试进行身份验证的租户中的有效用户。因此,微软开始使用Kerberos来验证我的身份。这是一个非常酷的功能,但并不总是我想要的。Seamless SSO

在某些情况下,我可能希望明确选择其他用户进行登录。 我不想在 Entra ID 端为整个应用程序/租户禁用无缝 SSO,因为在某些情况下,这正是我想要的。

因此,我正在寻找一种方法来明确告诉 WebView 在登录页面的质询后不要传递任何 Kerberos 票证。至少我认为这就是我正在寻找的 - 如果我走错了路,请随时纠正我。Negotiate

最终结果应如下所示:我的 WinForms 应用程序有一个“登录”按钮和一个“使用当前用户”复选框。单击选中复选框的按钮,即可使用无缝 SSO 对我进行身份验证。单击未选中复选框的按钮会导致 Microsoft 登录页面要求我提供凭据。

我真的被困在这里,因为互联网上充斥着描述如何让 SSO 工作的内容。关于如何让它停止工作没有太多:D

.NET WinForms WebView OpenID 连接 标识模型

评论


答:

0赞 Ar Es 11/9/2023 #1

我以错误的方式处理了这件事。这可以通过添加到授权代码请求在 OIDC 端进行处理:prompt=login

var frontChannelExtraParameters = new IdentityModel.Client.Parameters();
if (!useCurrentUser)
    frontChannelExtraParameters.Add("prompt", "login");

var loginResult = await oidcClient.LoginAsync(
    new LoginRequest()
    {
        FrontChannelExtraParameters = frontChannelExtraParameters
    }
);