如何将URL上的身份验证令牌作为查询参数?

时间:2014-08-21 23:55:46

标签: c# asp.net-mvc asp.net-mvc-5 json url-encoding

我正在ASP.Net MVC网站上进行PayPal Express Checkout。

该网站使用令牌身份验证,因此我尝试将令牌作为查询参数放在PayPal返回网址上。

我有一个处理程序拦截对我网站的所有请求,并从URL或请求标头中提取令牌。

从标题中正常工作但我在查询参数时遇到以下异常。我从声明主体获取令牌,不进行任何编码/解码。我试过this method但没有运气(发生同样的异常)。

System.ArgumentException was caught
  HResult=-2147024809
  Message=Jwt10204: 'System.IdentityModel.Tokens.JwtSecurityTokenHandler' cannot read this string: '{really long token}'.
The string needs to be in compact JSON format, which is of the form: '<Base64UrlEncodedHeader>.<Base64UrlEndcodedPayload>.<OPTIONAL, Base64UrlEncodedSignature>'.
  Source=System.IdentityModel.Tokens.Jwt
  StackTrace:
       at System.IdentityModel.Tokens.JwtSecurityTokenHandler.ReadToken(String jwtEncodedString)
       at {our namespace}.Providers.JwtTokenServiceProvider.GetToken(String value)
       at {our namespace}.TokenAuthorisationController.Post(TokenRequest request)

1 个答案:

答案 0 :(得分:0)

原来问题是PayPal在URL的末尾添加了另一个字符串(看起来像PayPal Express Checkout令牌),并使用逗号作为分隔符而不是“&amp;”符号

所以我通过删除逗号字符和逗号之后的额外字符来解决这个问题,以增加我的JWT令牌。