我有一个MVC应用程序,它使用针对IdS4的Microsoft.AspNetCore.Authentication.OpenIdConnect中间件(核心1.1) . MVC使用在身份验证后获得的访问令牌调用后端Web API . 我正在使用“code id_token”响应 . 我使用范围对API进行了细分,但我有很多,即15.当我构建OIDCoptions时,我添加了客户端所需的范围:
oidOptions.Scope.Add("usersRead"); // Api scope
oidOptions.Scope.Add("usersWrite"); // Api scope
这一切都很好 . 但是,我添加了另外两个范围,现在当MVC针对IdS进行OIDC挑战时,即在用户获得登录表单之前,IdS报告以下内容
糟糕的要求
我可以从我的MVC应用程序列表中删除任何两个范围,它会再次开始工作 . 这让我觉得可以请求的作用域数量有一些限制,或URL长度有些问题?我查看了OIDC中间件和IdS的源代码,我找不到任何会限制客户端可能请求的API范围数量的内容 .
有任何想法吗?
1 回答
感谢您的评论 . 在Azure Web App中设置日志流后,问题立即突出显示 . 实际上,构成令牌请求的工件有一个字符串长度限制,特别是对于范围字符串300个字符 . 我们缩短了范围名称,现在一切正常 .
供参考,请参阅:https://github.com/IdentityServer/IdentityServer4/blob/aspnetcore1/src/IdentityServer4/Configuration/DependencyInjection/Options/InputLengthRestrictions.cs
注意,这是针对dot net core v1.1 - 对v2.0的类似限制 .