jeremylandon / apple-auth Goto Github PK
View Code? Open in Web Editor NEWSign in with Apple for .NET
License: MIT License
Sign in with Apple for .NET
License: MIT License
Guys,
this package uses CNG cryptography implementation.
But it works on windows only.
Please,
I'd like to send another algorithm. Could we use ECDsa.
Like that:
var path = "key.p8";
string content = await System.IO.File.ReadAllTextAsync(path);
string[] keyLines = content.Split('\n');
content = string.Join(string.Empty, keyLines.Skip(1).Take(keyLines.Length - 2));
byte[] privateKey = Convert.FromBase64String(content);
using var algorithm = ECDsa.Create();
algorithm.ImportPkcs8PrivateKey(privateKey, out int _);
var key = new ECDsaSecurityKey(algorithm) { KeyId = "KEY_ID" };
tokenDescriptor.SigningCredentials = new SigningCredentials(key, SecurityAlgorithms.EcdsaSha256);
var tokenHandler = new JwtSecurityTokenHandler();
var jwt = tokenHandler.CreateEncodedJwt(tokenDescriptor);
OR
private async Task<byte[]> getPrivateKey()
{
var path = Directory.GetCurrentDirectory()+"/Resources/AuthKey_G3F7S685MC.p8";
string content = await System.IO.File.ReadAllTextAsync(path);
string[] keyLines = content.Split('\n');
content = string.Join(string.Empty, keyLines.Skip(1).Take(keyLines.Length - 2));
return Convert.FromBase64String(content);
}
public async Task<string> GetSecret()
{
var _privateKey = await getPrivateKey();
using (var algorithm = GetEllipticCurvealgoritm(_privateKey))
{
var credentials = new SigningCredentials(new ECDsaSecurityKey(algorithm), SecurityAlgorithms.EcdsaSha256);
var tokenHandler = new JwtSecurityTokenHandler();
return tokenHandler.CreateEncodedJwt(new SecurityTokenDescriptor{
Issuer = _apple_teamID,
Audience = _apple_audience,
Subject = new ClaimsIdentity(new[] { new Claim("sub", _apple_subject) }),
Expires = DateTime.UtcNow.AddDays(10),
IssuedAt = DateTime.UtcNow,
NotBefore = DateTime.UtcNow,
SigningCredentials = credentials
});
}
}
private ECDsa GetEllipticCurvealgoritm(byte[] privateKey)
{
var keyParams = (ECPrivateKeyParameters) PrivateKeyFactory.CreateKey(privateKey);
var q = keyParams.Parameters.G.Multiply(keyParams.D).Normalize();
return ECDsa.Create(new ECParameters{
Curve = ECCurve.CreateFromValue(keyParams.PublicKeyParamSet.Id),
D = keyParams.D.ToByteArrayUnsigned(),
Q = {
X = q.XCoord.GetEncoded(),
Y = q.YCoord.GetEncoded()
}
});
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.