Oauth 使用IdentityServer3时重定向Uri太长

Oauth 使用IdentityServer3时重定向Uri太长,oauth,openid,identityserver3,Oauth,Openid,Identityserver3,我们正在考虑使用oAuth2和OpenID提供联合身份验证/授权。我们的原型是有希望的,我们有一个基本的框架并正在运行 然而,我们遇到了一个问题 用户通过身份验证后,框架将身份和访问令牌作为重定向URI的参数返回给客户端应用程序。由于我们希望保护的应用程序的性质,需要具有相当复杂的声明/角色。这将导致相当大的令牌*。如此之大,以至于超出了浏览器支持的最大URI长度,因此中断 所以我的问题是,有人知道是否可以将Identity Server配置为将令牌发回而不是获取令牌?或者是否有其他不偏离标准/

我们正在考虑使用oAuth2和OpenID提供联合身份验证/授权。我们的原型是有希望的,我们有一个基本的框架并正在运行

然而,我们遇到了一个问题

用户通过身份验证后,框架将身份和访问令牌作为重定向URI的参数返回给客户端应用程序。由于我们希望保护的应用程序的性质,需要具有相当复杂的声明/角色。这将导致相当大的令牌*。如此之大,以至于超出了浏览器支持的最大URI长度,因此中断

所以我的问题是,有人知道是否可以将Identity Server配置为将令牌发回而不是获取令牌?或者是否有其他不偏离标准/规范的解决方案

*我们在这里讨论的索赔实际上并没有那么大。这里的示例是来自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长度问题。

如果令牌太大,无法通过前通道绑定传递,则应切换到后通道绑定,即,将
响应类型
切换到
code
,并直接从令牌端点获取令牌


在前端通道中还可以选择使用POST传输方法,但它是OAuth 2.0()的可选扩展,我认为IdentityServer还不支持它。

这不太正确。需要将
responseMode
更改为
form\u post

var authorizationUri=新Uri(
client.CreateAuthorizeUrl(
clientId:“我的客户”,
responseType:“代码id\u令牌”,
作用域:“openid资源角色”,
重定向URI:“oob://application/tokens",
答复方式:“表格(邮政”);
IdentityServer然后将响应参数编码为HTML表单值,并
POST
将这些返回给客户端

<form method="post" action="oob://application/tokens">
    <input type="hidden" name="code" value="aca7b48d8a944ae6a9b91283e26b1740" />
    <input type="hidden" name="id_token" value="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ" />
    <input type="hidden" name="access_token" value="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ" />
    <input type="hidden" name="token_type" value="Bearer" />
    <input type="hidden" name="expires_in" value="3600" />
    <input type="hidden" name="scope" value="openid Resource roles" />
    <input type="hidden" name="session_state" value="AHzV1QYcGi-W95OYJAganx0piP5y_km_4q9qsuvAacg.e8ca5c9876007e40bf3cc89314c86c0f" />
</form>