在AspNetCore Api路由中编码的Base64

时间:2018-06-25 14:22:56

标签: asp.net-core base64 asp.net-core-mvc urlencode asp.net-core-webapi

我正在按照OCSP Responder中定义的规则创建RFC 6960

因此,我需要实现一个 GET 服务,其路由必须为:

{url}/{url-encoding of base-64 encoding of the DER encoding of the OCSPRequest}

我创建了GET操作:

[Route("api/ocsp")]
public class OcspController : Controller
{
    [HttpGet]
    [Route("{encoded}")]
    public async Task<IActionResult> Get(string encoded)
    {
        var ocspHttpRequest = await Request.ToOcspHttpRequest();
        var ocspHttpResponse =  await OcspResponder.Respond(ocspHttpRequest);
        return new OcspActionResult(ocspHttpResponse);
    }
    ...
 }

但是,在对URL进行编码时,ASP.NET Core找不到或返回针对该路由的错误请求。

base64中的Ocsp请求(请注意有两行):

MEkwRzBFMEMwQTAJBgUrDgMCGgUABBR1vr6HF4T/UsADPXoNr6lpJ1JRowQUJfgJ
6MaP2huu1lFzJOFlkswOcM8CCB6PD3SWpxwf

base64 ocsp请求的网址编码

MEkwRzBFMEMwQTAJBgUrDgMCGgUABBR1vr6HF4T%2FUsADPXoNr6lpJ1JRowQUJfgJ%0A6MaP2huu1lFzJOFlkswOcM8CCB6PD3SWpxwf

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

由Base64编码产生的某些字符在URL路径中无效。可以更改此设置,但是出于某种原因设置它是出于安全考虑。如果允许这些角色,那么您将面临许多其他攻击无法实现的攻击。<​​/ p>

不过,您可以随意将其作为查询字符串的一部分进行传递。这样处理就不会出错。

答案 1 :(得分:0)

有一个解决方法,您可以将 {encoded} 更改为 {*encoded},然后它将接受不允许的其他符号。