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
网站中使用长查询字符串始终是一个好习惯。
解决此错误的一种方法是更改网站的 maxQueryString 和 maxUrl 值。您可以通过将代码 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 请求访问令牌
UWP App 中的 IdentityModel.OidcClient 从 3.1.2 迁移到 4.0