Giter Club home page Giter Club logo

apple-auth's People

Contributors

dependabot[bot] avatar jeremylandon avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

apple-auth's Issues

Support for linux/macos

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()
      }
    });
  }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.