我正在尝试构建一个简单的身份验证机制来授权或拒绝对我的微服务应用程序的特定端点的调用。
这个想法是只允许从微服务 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 上,我从标头获取令牌,我必须“解密”它并检查其字段。
我怎样才能实现这个目标?我感觉我不是在右边
您可以像这样分离数据:
{
"authData":{
"issuer": "mywebsite.com",
"expTime": 01/01/2023
},
"signature":"Your signature"
}
之后,您可以仅获取 authData,对其进行签名并将结果放入签名字段。该 JSON 可以编码为 base64,并放入 HTTP 标头。
目标服务收到 HTTP 请求:
要实施验证,您可以使用
您也可以查看这篇关于 RSA 的文章