首页 > 解决方案 > AspNetCore Api 路由中的 Base64 编码

问题描述

我正在按照RFC 6960中定义的规则创建一个OCSP 响应程序。

所以,我需要实现一个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 请求的 URL 编码:

MEkwRzBFMEMwQTAJBgUrDgMCGgUABBR1vr6HF4T%2FUsADPXoNr6lpJ1JRowQUJfgJ%0A6MaP2huu1lFzJOFlkswOcM8CCB6PD3SWpxwf

我该如何解决这个问题?

标签: asp.net-corebase64asp.net-core-mvcurlencodeasp.net-core-webapi

解决方案


由 Base64 编码产生的某些字符在 URL 路径中无效。这可以更改,但设置这种方式是有原因的:即出于安全考虑。如果您允许这些角色,您将面临许多其他情况下不可能发生的攻击。

但是,您可以随意将其作为查询字符串的一部分传递。以这种方式处理时,您不会出错。


推荐阅读