Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.95 KB | None | 0 0
  1.  
  2. const moment = require('moment');
  3. const fetch = require('request-promise');
  4. const jws = require('jws-jwk');
  5.  
  6. class Apple {
  7. async decode(identityToken) {
  8. const response = await fetch({
  9. json: true,
  10. method: 'GET',
  11. url: 'https://appleid.apple.com/auth/keys'
  12. });
  13.  
  14. let verified = false;
  15.  
  16. for (let i = 0; i < response.keys.length; i += 1) {
  17. const jwk = response.keys[0];
  18.  
  19. const verifiedByKey = jws.verify(
  20. identityToken,
  21. jwk
  22. );
  23. if (verifiedByKey) {
  24. verified = true;
  25. }
  26. }
  27.  
  28.  
  29. if (!verified) {
  30. throw new Error('Identity token not valid');
  31. }
  32.  
  33. const payload = JSON.parse(jws.decode(identityToken).payload);
  34.  
  35. const date = new Date(payload.exp * 1000);
  36.  
  37. if (moment(date).isBefore(new Date())) {
  38. throw new Error('Identity token not valid, time expired');
  39. }
  40.  
  41. return payload;
  42. }
  43. }
  44.  
  45. module.exports = Apple;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement