querystring是太长的错误在uwp b2c应用c#.net应用程序



我们正在使用Microsoft.Identity.Client nuget库版本4。X和我们能够认证像facebook这样的社会身份提供者,也可以使用azure b2c userflows认证一些第三方。在使用Azure AD单点登录进行身份验证时,我们在应用程序中得到一个错误,显示"请求的查询字符串太长"。但是在网页上我们没有这样的问题。

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

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

通常使用如下代码初始化和调用acquire令牌方法:

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()

一般来说,对于URL中的任何超过此限制的查询字符串都会抛出此错误。在ASP.NET网站中,避免长查询字符串总是一个很好的做法。

解决此错误的一种方法是更改maxQueryStringmaxUrl为网站创造价值。您可以通过在web.config中添加以下代码片段来实现这一点.
...
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxQueryString="32768"/>
</requestFiltering>
</security>
</system.webServer>
...

您可能还必须在web.config中添加以下内容.

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

注意,您不必使用上面代码片段中显示的精确数值,这些数字只是示例。请阅读来自Microsoft的请求限制文档以获取更多信息。

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

public T WithExtraQueryParameters (string extraQueryParameters);

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

相关内容

  • 没有找到相关文章

最新更新