.NET 中使用 RSA 的简单签名令牌机制

问题描述 投票:0回答:1

我正在尝试构建一个简单的身份验证机制来授权或拒绝对我的微服务应用程序的特定端点的调用。

这个想法是只允许从微服务 X 到 Y 的某些调用,为此我想生成一个 RSA 密钥对并使用私钥来加密令牌并让 ms 使用公共密钥来解密一次收到了。

为了实现这一目标,我构建了一个包含两个字段的 JSON 令牌:颁发者和过期时间。

然后我用私钥对令牌进行签名:

using (var rsa = RSA.Create())
{
    rsa.ImportFromPem(PrivateKey);

    var token = AuthMaintenanceToken.CreateToken();//the json string token
    byte[] encodedToken = Encoding.UTF8.GetBytes(token);

    byte[] encryptedToken = rsa.SignData(encodedToken, HashAlgorithmName.SHA512, RSASignaturePadding.Pkcs1);

    return Convert.ToBase64String(encryptedToken);
}

然后我将令牌作为 http 中的标头“xyx”发送到微服务。

现在,在端点 /something 上,我从标头获取令牌,我必须“解密”它并检查其字段。

我怎样才能实现这个目标?我感觉我不是在右边

.net encryption rsa
1个回答
0
投票

您可以像这样分离数据:

{
    "authData":{ 
        "issuer": "mywebsite.com",
        "expTime": 01/01/2023
     },
    "signature":"Your signature"
}

之后,您可以仅获取 authData,对其进行签名并将结果放入签名字段。该 JSON 可以编码为 base64,并放入 HTTP 标头。

目标服务收到 HTTP 请求:

  1. 使用您的数据读取 HTTP 身份验证标头
  2. 读取authData
  3. 读取签名并通过公钥进行检查。如果相同(如 authData),则请求可以发送到下一阶段。

要实施验证,您可以使用

您也可以查看这篇关于 RSA 的文章

© www.soinside.com 2019 - 2024. All rights reserved.