C# 为DocuSign API创建有效的JWT令牌
尝试创建有效的jwt令牌 通过设置,我创建了一个RSA密钥对,并获得了私钥,但没有“----开始RSA私钥----------结束RSA私钥”----- " 我按照这里的说明进行操作,经过很多小时我创建了这个方法C# 为DocuSign API创建有效的JWT令牌,c#,jwt,docusignapi,C#,Jwt,Docusignapi,尝试创建有效的jwt令牌 通过设置,我创建了一个RSA密钥对,并获得了私钥,但没有“----开始RSA私钥----------结束RSA私钥”----- " 我按照这里的说明进行操作,经过很多小时我创建了这个方法 public string Sign(string privateKey) { List<string> segments = new List<string>(); var header = new { alg
public string Sign(string privateKey)
{
List<string> segments = new List<string>();
var header = new { alg = "RS256", typ = "JWT" };
//For production environments, use account.docusign.com
var payload = new
{
iss = "4f489d61-dc8b------a828-3992e670dcbc",
iat = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds,
aud = "account-d.docusign.com",
scope = "signature impersonation"
};
byte[] headerBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(header, Formatting.None));
byte[] payloadBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(payload, Formatting.None));
segments.Add(Base64UrlEncode(headerBytes));
segments.Add(Base64UrlEncode(payloadBytes));
string stringToSign = string.Join(".", segments.ToArray());
byte[] bytesToSign = Encoding.UTF8.GetBytes(stringToSign);
byte[] keyBytes = Convert.FromBase64String(privateKey);
var privKeyObj = Asn1Object.FromByteArray(keyBytes);
var privStruct = RsaPrivateKeyStructure.GetInstance((Asn1Sequence)privKeyObj);
ISigner sig = SignerUtilities.GetSigner("SHA256withRSA");
sig.Init(true, new RsaKeyParameters(true, privStruct.Modulus, privStruct.PrivateExponent));
sig.BlockUpdate(bytesToSign, 0, bytesToSign.Length);
byte[] signature = sig.GenerateSignature();
segments.Add(Base64UrlEncode(signature));
return string.Join(".", segments.ToArray());
}
private static string Base64UrlEncode(byte[] input)
{
var output = Convert.ToBase64String(input);
output = output.Split('=')[0]; // Remove any trailing '='s
output = output.Replace('+', '-'); // 62nd char of encoding
output = output.Replace('/', '_'); // 63rd char of encoding
return output;
}
公共字符串符号(字符串私钥)
{
列表段=新列表();
var header=new{alg=“RS256”,typ=“JWT”};
//对于生产环境,请使用account.docusign.com
var有效载荷=新
{
iss=“4f489d61-dc8b------a828-3992e670dcbc”,
iat=(Int32)(DateTime.UtcNow.Subtract(新的DateTime(1970,1,1))).TotalSeconds,
aud=“account-d.docusign.com”,
scope=“签名模拟”
};
byte[]headerBytes=Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(header,Formatting.None));
byte[]payloadBytes=Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(payload,Formatting.None));
添加(Base64UrlEncode(headerBytes));
添加(Base64UrlEncode(payloadBytes));
string stringToSign=string.Join(“.”,segments.ToArray());
byte[]bytesToSign=Encoding.UTF8.GetBytes(stringToSign);
byte[]keyBytes=Convert.FromBase64String(privateKey);
var privKeyObj=Asn1Object.FromByteArray(keyBytes);
var privStruct=RsaPrivateKeyStructure.GetInstance((Asn1Sequence)privKeyObj);
ISigner sig=SignerUtilities.GetSigner(“SHA256withRSA”);
sig.Init(true,新的RsaKeyParameters(true,privStruct.modules,privStruct.PrivateExponent));
sig.BlockUpdate(bytesToSign,0,bytesToSign.Length);
byte[]signature=sig.GenerateSignature();
添加(Base64UrlEncode(签名));
返回字符串.Join(“.”,segments.ToArray());
}
专用静态字符串Base64UrlEncode(字节[]输入)
{
var输出=Convert.tobase64字符串(输入);
output=output.Split('=')[0];//删除任何尾随'='
output=output.Replace('+','-');//编码的第62个字符
output=output.Replace('/',''');//编码的第63个字符
返回输出;
}
当我在这个工具中检查JWT验证时,我得到了无效的签名错误
如何修复令牌??我无法继续执行步骤2获取访问令牌…很抱歉您在JWT方面遇到问题。我建议您使用DocuSign C#SDK,而不是尝试编写自己的代码。 然后您可以在这里找到如何使用JWT的示例-。 与JWT相关的特定代码在这里-在
UpdateUserFromJWT()
方法下
JWT的常见问题:
谢谢我没有用户,我的服务调用api,因此我遵循应用程序身份验证授权场景。服务集成直接与DocuSign帐户集成,并且不会对每个最终用户进行身份验证。相反,使用此授权,应用程序本身被授予访问令牌,并代表自己发出请求。如何获得jwt令牌来验证我的应用程序?我尝试了SDK和RequestJWTUserToken方法,现在我获得了访问令牌!!!非常感谢。
public string Sign(string privateKey)
{
List<string> segments = new List<string>();
var header = new { alg = "RS256", typ = "JWT" };
//For production environments, use account.docusign.com
var payload = new
{
iss = "4f489d61-dc8b------a828-3992e670dcbc",
iat = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds,
aud = "account-d.docusign.com",
scope = "signature impersonation"
};
byte[] headerBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(header, Formatting.None));
byte[] payloadBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(payload, Formatting.None));
segments.Add(Base64UrlEncode(headerBytes));
segments.Add(Base64UrlEncode(payloadBytes));
string stringToSign = string.Join(".", segments.ToArray());
byte[] bytesToSign = Encoding.UTF8.GetBytes(stringToSign);
byte[] keyBytes = Convert.FromBase64String(privateKey);
var privKeyObj = Asn1Object.FromByteArray(keyBytes);
var privStruct = RsaPrivateKeyStructure.GetInstance((Asn1Sequence)privKeyObj);
ISigner sig = SignerUtilities.GetSigner("SHA256withRSA");
sig.Init(true, new RsaKeyParameters(true, privStruct.Modulus, privStruct.PrivateExponent));
sig.BlockUpdate(bytesToSign, 0, bytesToSign.Length);
byte[] signature = sig.GenerateSignature();
segments.Add(Base64UrlEncode(signature));
return string.Join(".", segments.ToArray());
}
private static string Base64UrlEncode(byte[] input)
{
var output = Convert.ToBase64String(input);
output = output.Split('=')[0]; // Remove any trailing '='s
output = output.Replace('+', '-'); // 62nd char of encoding
output = output.Replace('/', '_'); // 63rd char of encoding
return output;
}