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

h7wcgrx3  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(145)

我使用IdentityModel.OidcClient在WinForms应用程序中根据Microsoft Entra ID对用户进行身份验证。
效果很好。太好了。
基本上,登录页面从来没有问我的用户名/电子邮件或密码。它只是无缝(提示..)签署我在使用我目前登录的windows帐户。
我猜这是因为当前登录到运行WinForms应用程序的计算机的Windows用户实际上是我试图进行身份验证的租户内的有效用户。因此Microsoft Seamless SSO启动并使用Windows 1000来验证我。这是一个非常酷的功能,但并不总是我想要的。
在某些情况下,我可能想显式选择一个不同的用户来登录。我不想在整个应用程序/租户的Entra ID端禁用无缝SSO,因为在某些情况下,这正是我想要的。
因此,我正在寻找一种方法来明确地告诉WebView不要在登录页面上的Negotiate挑战后传递任何恶意票证沿着。至少我认为这就是我正在寻找的-如果我走错了路,请随时纠正我。
最终的结果应该是这样的:我的WinForms应用程序有一个“登录”按钮和一个“使用当前用户”复选框。单击选中复选框的按钮可以使用无缝SSO对我进行身份验证。单击未选中复选框的按钮会导致Microsoft的登录页面要求我提供凭据。
我真的被困在这里,因为互联网上充满了描述如何让SSO工作的内容..没有太多关于如何让它停止工作的内容:D

mqkwyuun

mqkwyuun1#

我的方法是错误的。这可以在OIDC端通过将prompt=login添加到授权代码请求中来处理:

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

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

字符串

相关问题