1

我一直在使用 DotNetOpenAuth 创建自己的资源服务器。一切正常,我可以很好地检索令牌。但是,我现在开始构建一个调用我的资源服务器的客户端,并且 DotNetOpenAuth 返回的响应存在一个小问题。我希望 DotNetOpenAuth 返回一个表示访问令牌的 JSON 字符串。它会这样做,但有一点需要注意:JSON 字符串以十六进制数字为前缀,以零为后缀:

HTTP/1.1 200 OK
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/8.0
X-AspNetMvc-Version: 4.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?RDpcUGVyc29vbmxpamtlIHByb2plY3RlblxpY2hlY2ttb3ZpZXMtZG90bmV0XHNyY1xXZWJBcGlcdG9rZW5zXA==?=
X-Powered-By: ASP.NET
Date: Mon, 04 Mar 2013 13:04:12 GMT

3d2
{"access_token":"gAAAADrFpM2DRiBdqVBPdEq_ISvdfZb6CaRMZr7vWcn2AuKGs2TXyNlzLaUX8xtLQfxFdbTYBIK-LF8cfEwvV8gUKC0lpcodb9OWm9sUmu_IIApmMPIBQDgT1LtkEjOsv_gQdmwN906Pd1KczI2O3Pt1DqzhL_Rpub9zJQmh6EKDp4_EJAEAAIAAAACTvB0tYmrRNExdGQhGBrHgYnlgt7Rw-ilB2wLScW1YgOHE6MOY0WrfKG9aFLUAcmADYSrX55n9mfC9NKDXJBARc5ev-hnWTnApw7yq51c1KwbKv7bxoEVzar8eAAFrJi_OBQjlcaN8IFfnryu1VK_C1o-U2gLgdnBZzFcCDhgNseRFjUCmYXssEvjUswg0Oy3c_F_IXpP85kL6QCYmpGwV1juTuiMwMuZOCbcPMAssM70JMi7Ai7zT7hxCCZ5SLgeyLjBqPX7bXnhRIO24mkZ9pN5pCzorjOX_8rqdrPwR6WkPy0tc69oyBTak8L6nJYWzxfuAVhZGEowHCx3KNWfG_R_w23N7Y3c9HoIfO6RSYpnfieGLKhxHxd1_jsczGtM","token_type":"bearer","expires_in":3600,"refresh_token":"q5NN!IAAAANCHUJ5tukpT_UzgkRGCTM4Oy1qgw8GP5wn8HDS2jN1isQAAAAFfLe6KZMht1mmbIbF6RihvMZvjrwtaoZRZbaavPbte9CtjLWB_isHOroLv669rq1PmTppmVyo1Om3HVvp2AC16SDe7l02POHIYbPs_Cox6kekHc74_8pLP8SAGcrXy1EzjAPKc_UksMTp8aqaAnrU3ulx2TYYrRMyYb6pW7awO6_aiHtLixrF6dVA1-6DWvKuCSeJW0oZCm45Op1-wht8qAWkK3B70C6dZU6dmsggleA","scope":"movie list user comment"}
0 

如果我查看官方规范(https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-31#section-4.1.4),它没有说明前缀和/或后缀。输出是否正确,或者这是 DotNetOpenAuth 中的错误?Content-length关于没有标题的响应让我印象深刻的一件事。这让我相信也许3d2字符串实际上是内容长度。我相信是这样,因为十六进制的 3d2 是十进制的 978,这正是 3d2 和 0 之间的 JSON 字符串的长度。

有什么方法可以将 DotNetOpenAuth 配置为返回常规的 Content-length 标头而不输出前缀和后缀?

为了完整起见,我使用以下代码(使用依赖注入)在 .NET 4.0 上的 ASP.NET MVC 4 应用程序中运行我的授权服务器:

public sealed class TokensController : Controller
{
    private readonly AuthorizationServer authorizationServer;

    public TokensController(AuthorizationServer authorizationServer)
    {
        this.authorizationServer = authorizationServer;
    }

    public ActionResult Create()
    {
        var outgoingWebResponse = this.authorizationServer.HandleTokenRequest(this.Request);
        var asActionResult = outgoingWebResponse.AsActionResult();
        return asActionResult;
    }
} 
4

1 回答 1

0

问题出在 DotNetOpenAuth 库中,其中Content-length标头未与请求一起发送。这导致添加了表示请求长度的十六进制数。报告此错误后,已由 DotNetOpenAuth 库的作者修复。

于 2014-08-15T09:17:26.577 回答