【问题标题】:querystring is too long error in uwp b2c app c#.net appuwp b2c app c#.net app中的querystring is too long错误
【发布时间】: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()

【问题讨论】:

    标签: c# .net asp.net-mvc azure-ad-b2c msal


    【解决方案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);
    猜你喜欢
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多