uwp b2c app c#.net app中的querystring is too long错误

Posted

技术标签:

【中文标题】uwp b2c app c#.net app中的querystring is too long错误【英文标题】:querystring is too long error in uwp b2c app c#.net app 【发布时间】:2021-12-14 15:49:01 【问题描述】:

我们使用的是 Microsoft.Identity.Client nuget 库版本 4.x,我们能够验证社交身份提供者(如 facebook)以及使用 azure b2c 用户流的一些第三方提供者。在使用我们的 Azure AD SSO 进行身份验证时,我们在应用程序中收到一个错误,显示“请求的查询字符串太长”。但是在网络上我们没有这样的问题。

通过 MS 的一些研究和支持帮助论坛,我们发现我们需要从应用程序端修改代码并发送 POST 请求而不是 GET,以便 SAML 请求不会出错。

知道 Microsoft.Identity.Client nuget 库是否允许我们这样做吗?

我们通常使用如下代码来初始化并调用获取令牌方法。

PublicClientApp = PublicClientApplicationBuilder.Create(AuthServiceConfiguration.ClientId)
            .WithB2CAuthority(AuthServiceConfiguration.Authority)
            .Build();

AuthenticationResult authResult = await PublicClientApp.AcquireTokenInteractive(AuthServiceConfiguration.ApiScopes)
                .WithAccount(GetAccountByPolicy(accounts, AuthServiceConfiguration.PolicySignUpSignIn))
                .WithPrompt(Prompt.SelectAccount)
                .ExecuteAsync()

【问题讨论】:

【参考方案1】:

通常,对于 URL 中超过此限制的任何查询字符串,都会引发此错误。避免在 ASP.NET 网站中使用长查询字符串始终是一个好习惯。

解决此错误的一种方法是更改​​网站的 ma​​xQueryStringma​​xUrl 值。您可以通过将代码 sn-p 中显示的以下内容添加到您的 web.config 来实现。

...
<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxQueryString="32768"/>
    </requestFiltering>
  </security>
</system.webServer>
...

您可能还需要在 web.config 中添加以下内容。

<httpRuntime maxQueryStringLength="32768" maxUrlLength="65536"/>

请注意,您没有使用上述 sn-ps 中显示的确切数值,这些数字只是示例。阅读此来自 Microsoft 的 Request Limits 文档以了解更多信息。

您还可以使用 WithExtraQueryParameters() 方法为 HTTP 认证请求中的查询字符串设置额外的查询参数,如下所示。

public T WithExtraQueryParameters (string extraQueryParameters);

这里的extraQueryParameters 是在向权威机构发送HTTP 身份验证请求时将按原样附加到查询字符串中的参数。有关更多信息,请查看此 WithExtraQueryParameters 文档。

【讨论】:

我面临的问题是在使用 azure b2c 集成身份和用户流的 uwp 桌面应用程序中。我们没有自己的服务器,因为我们使用的是 azure 云。由于 azure b2c 的查询字符串太长,身份验证失败。似乎您的更改是指网络服务器?哪个方法会采用 extraQueryParameters ? 如果我使用 msal.net lib,如何设置 maxUrlLength 长度和 maxQueryStringLength ? 这会是正确的通过方式吗? authResult = await SingleSignOnManager.PublicClientApp.AcquireTokenInteractive(scopes) .WithExtraQueryParameters("&maxQueryStringLength=32768&maxUrlLength=65536") .ExecuteAsync() .ConfigureAwait(false);

以上是关于uwp b2c app c#.net app中的querystring is too long错误的主要内容,如果未能解决你的问题,请参考以下文章

如何处理异步函数 UWP App GetFileFromPathAsync(path) 中的异常;

在 Postman 中为受 Azure AD B2C 保护的 Azure Function App 请求访问令牌

B2C电商系统开发app平台定制详解

UWP App 中的 IdentityModel.OidcClient 从 3.1.2 迁移到 4.0

对如何在 Blazor App 中从 B2C 获取访问令牌感到困惑

在 UWP 应用中创建使用调试 App Service (应用服务)