c# - DeviceCheck:无法验证授权令牌 C#
问题描述
我正在尝试从 ASP.NET Core API 调用 Apple DeviceCheck API。为此,我需要创建一个 JWT。我为此使用 Jose 和 BouncyCastle 库。我尝试了 2 次不同的密钥创建,每次都从 DeviceCheck 开发 v1 API 返回 401(无法验证授权令牌)HTTP 状态。
private const string MembershipTeamId = "QWERTYUIOP";
private const string P8KeyId = "QWERTYUIOP";
public static string CreateJwt()
{
var extraHeaders = new Dictionary<string, object>()
{
{ "kid", P8KeyId },
{ "typ", "JWT" }
};
var payload = new Dictionary<string, object>()
{
{ "iss", MembershipTeamId },
{ "iat", DateTimeOffset.UtcNow.ToUnixTimeSeconds() }
};
var key = GetCngKey();
return JWT.Encode(payload, key, JwsAlgorithm.ES256, extraHeaders);
}
下面 2 种不同的方法,我尝试创建 CngKey
// using BouncyCastle
private static CngKey GetCngKey()
{
using (var reader = System.IO.File.OpenText(@"C:\pathto\key.p8"))
{
var param = (ECPrivateKeyParameters)new PemReader(reader).ReadObject();
return EccKey.New(
param.Parameters.G.AffineXCoord.GetEncoded(),
param.Parameters.G.AffineYCoord.GetEncoded(),
param.D.ToByteArrayUnsigned());
}
}
// using CngKey
private static CngKey GetCngKey2()
{
var keyBytes = Convert.FromBase64String("inline .p8 content without -----BEGIN/END PRIVATE KEY-----");
return CngKey.Import(keyBytes, CngKeyBlobFormat.Pkcs8PrivateBlob);
}
解决方案
推荐阅读
- swift - 绘制另一条时 UIBezierPath 线消失
- mysql - 在mysql中左加入后如何获取每个寄存器的最高日期?
- excel - 将那么多行读入记录集中,因为 Excel 文件的 B 列中有使用的单元格,使用 ADODB 与 EXCEL 连接;
- matlab - 大型线性规划的 Mosek 内存问题
- json - 如何解码我收到的作为对 HTTP POST 请求的响应的数据
- html - 为什么在使用这个 CSS 时会显示“at-rule or selector expectedcss”?
- javascript - 模块和非模块使用的脚本 - JavaScript
- javascript - Ag-grid 外部过滤器不适用于 React
- r - 如何将数据集通过管道传输到 pmap?
- amazon-s3 - 没有密钥信息的存储桶内容的 S3 临时 URL