根据JWT(特别是使用Box.com api),你需要
创建标题和声明,base 64 url对它们进行编码,用点连接它们。
You then need to take that and the secret key (a little confusion here, more on that in a second) and then encrypt them。对于Box.com,它将使用RS256。
然后你把它发送给提供者(再次,在这种情况下是Box.com),一切都应该很好,花花公子。
我有第1步没问题。
步骤2对我来说有点问题。
我假设我使用了我的私钥?编辑:不,私钥是解密。
虽然使用HSA这样做的例子太多了,但是我需要使用RSA和System.IdentityModel.Tokens.JWT_stuff过程并不是很有帮助。如果Box.com允许使用HSA256,我可以使用其他几个包和库。
我已经看了this question,但它并没有给你带来过多的帮助。
那么我需要做些什么才能完成第2步?换句话说:如何在C#中使用RSA256进行加密?
答案 0 :(得分:1)
快速查看GitHub上的Box.com's developer page指向Box .NET SDK by Box Mobile Team,其中有一个BoxJWTAuth.cs,其中包含一些代码,您可以查看他们使用RSA的位置。
甚至还有Box.V2.Samples.JWTAuth/Program.cs显示如何使用它。
在检查BoxJWTAuth时,我看到了这段代码
private string ConstructJWTAssertion(string sub, string boxSubType)
{
byte[] randomNumber = new byte[64];
using (var rng = new RNGCryptoServiceProvider())
{
rng.GetBytes(randomNumber);
}
var claims = new List<Claim>{
new Claim("sub", sub),
new Claim("box_sub_type", boxSubType),
new Claim("jti", Convert.ToBase64String(randomNumber)),
};
var payload = new JwtPayload(this.boxConfig.ClientId, AUTH_URL, claims, null, DateTime.UtcNow.AddSeconds(30));
var header = new JwtHeader(signingCredentials: this.credentials);
if (this.boxConfig.JWTPublicKeyId != null)
header.Add("kid", this.boxConfig.JWTPublicKeyId);
var token = new JwtSecurityToken(header, payload);
var tokenHandler = new JwtSecurityTokenHandler();
string assertion = tokenHandler.WriteToken(token);
return assertion;
}
希望这有帮助。