我们正在使用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
网站中,避免长查询字符串总是一个很好的做法。
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文档。