我们正在考虑使用IdentityServer3使用 oAuth2 和 OpenID 提供联合身份验证/授权。我们的原型很有前途,我们有一个基本框架正在运行。
然而,我们遇到了一个问题......
用户通过身份验证后,框架将身份和访问令牌作为重定向 URI 的参数返回给客户端应用程序。由于我们正在寻求保护的应用程序的性质,需要有相当复杂的声明/角色。这会产生相当大的令牌*。如此之大,以至于超出了浏览器支持的最大 URI 长度,因此会中断。
所以我的问题是,是否有人知道是否可以配置 Identity Server 以 POST 回令牌而不是 GET?或者是否有另一种不偏离标准/规范的解决方案?
*我们在这里谈论的索赔实际上并没有那么大。作为一个例子,这里是来自 IdentityServer3 代码示例的声明
Claims = new Claim[]
{
new Claim(Constants.ClaimTypes.Name, "Alice Smith"),
new Claim(Constants.ClaimTypes.GivenName, "Alice"),
new Claim(Constants.ClaimTypes.FamilyName, "Smith"),
new Claim(Constants.ClaimTypes.Email, "AliceSmith@email.com"),
new Claim(Constants.ClaimTypes.Role, "Admin"),
new Claim(Constants.ClaimTypes.Role, "Geek"),
new Claim(Constants.ClaimTypes.WebSite, "http://alice.com"),
new Claim(Constants.ClaimTypes.Address, "{ \"street_address\": \"One Hacker Way\", \"locality\": \"Heidelberg\", \"postal_code\": 69118, \"country\": \"Germany\" }")
}
如果我们为此添加另一个声明,其大小与地址声明的大小相同,那么我们就会遇到 URI 长度问题。