Подпишите токен с RS256 в правилах auth0.Необработанное асинхронное исключение - PullRequest
0 голосов
/ 09 апреля 2019

Мой вход в систему для начинающих пользователей выглядит следующим образом:

1. Пользователь нажимает кнопку входа на моей угловой странице, и он перенаправляет его на страницу входа auth0

2. Затем он регистрируется впервые

3.Мои правила проверяют, является ли он пользователем в первый раз, и если true, перенаправляет его на мою угловую страницу (/ конечная точка регистра), где я хочу добавить логику, чтобы добавить этого пользователя в мою пользовательскую БД.

4. Затем пользователь должен вернуться к потоку входа в систему auth0 и повторить все правила снова. Проблема в том, что я получаю эту ошибку в моем URL:

http://localhost:4200/callback#error=access_denied&error_description=error:0906D06C:PEM%20routines:PEM_read_bio:no%20start%20line&state=1ab01wks-UUYE_Fq5mcEGnv-6ocMYo-z

регистрирует в режиме отладки в правилах auth0

 {
"code": 500,
"error": "Script generated an unhandled asynchronous exception.",
"details": "Error: error:0906D06C:PEM routines:PEM_read_bio:no start line",
"name": "Error",
"message": "error:0906D06C:PEM routines:PEM_read_bio:no start line",
"stack": "Error: error:0906D06C:PEM routines:PEM_read_bio:no start line\n at Sign.sign (crypto.js:331:26)\n at Object.sign (/data/_verquire/auth0-extension-s3-tools/1.1.1/node_modules/jwa/index.js:76:45)\n at Object.jwsSign [as sign] (/data/_verquire/auth0-extension-s3-tools/1.1.1/node_modules/jws/lib/sign-stream.js:32:24)\n at Object.module.exports [as sign] (/data/_verquire/auth0-extension-hapi-tools/1.2.1/node_modules/jsonwebtoken/sign.js:144:16)\n at createToken (/data/io/aefe221a-b96c-403d-8dd2-b535234672e1/webtask.js:123:20)\n at async.waterfall.callback.user (/data/io/aefe221a-b96c-403d-8dd2-b535234672e1/webtask.js:125:19)\n at fn (/data/sandbox/node_modules/auth0-authz-rules-api/node_modules/async/lib/async.js:638:34)\n at Immediate._onImmediate (/data/sandbox/node_modules/auth0-authz-rules-api/node_modules/async/lib/async.js:554:34)\n at runCallback (timers.js:810:20)\n at tryOnImmediate (timers.js:768:5)\n at processImmediate [as _immediateCallback] (timers.js:745:5)"
}
3:03:02 PM:
 Code generated an uncaught exception: Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
at Sign.sign (crypto.js:331:26)
at Object.sign (/data/_verquire/auth0-extension-s3-tools/1.1.1/node_modules/jwa/index.js:76:45)
at Object.jwsSign [as sign] (/data/_verquire/auth0-extension-s3-tools/1.1.1/node_modules/jws/lib/sign-stream.js:32:24)
at Object.module.exports [as sign] (/data/_verquire/auth0-extension-hapi-tools/1.2.1/node_modules/jsonwebtoken/sign.js:144:16)
at createToken (/data/io/aefe221a-b96c-403d-8dd2-b535234672e1/webtask.js:123:20)
at async.waterfall.callback.user (/data/io/aefe221a-b96c-403d-8dd2-b535234672e1/webtask.js:125:19)
at fn (/data/sandbox/node_modules/auth0-authz-rules-api/node_modules/async/lib/async.js:638:34)
at Immediate._onImmediate (/data/sandbox/node_modules/auth0-authz-rules-api/node_modules/async/lib/async.js:554:34)
at runCallback (timers.js:810:20)
at tryOnImmediate (timers.js:768:5)
at processImmediate [as _immediateCallback] (timers.js:745:5)

Это мое правило:

function(user, context, callback) {
  if (context.protocol !== "redirect-callback") {
    if (context.stats.loginsCount === 1) {
      function createToken(clientId, clientSecret, issuer, user) {
        var options = {
          expiresInMinutes: 5,
          audience: clientId,
          issuer: issuer,
          algorithm: 'RS256'
        };
        return jwt.sign(user, clientSecret, options);
      }
      var token = createToken(
        configuration.CLIENT_ID,
        configuration.CLIENT_SECRET,
        configuration.ISSUER, {
          sub: user.user_id,
          email: user.email,
          scope: 'openid'
        }
      );

      context.redirect = {
        url: "http://localhost:4200/register?token=" + token
      };
      return callback(null, user, context);
    }
    return callback(null, user, context);
  }  else {
    function verifyToken(clientId, clientSecret, issuer, token, cb) {
      jwt.verify(
        token,
        clientSecret, {
          audience: clientId,
          issuer: issuer
        },
        cb
      );
    }
    function postVerify(err, decoded) {
        return callback(null, user, context);
    }
    verifyToken(
      configuration.CLIENT_ID,
      configuration.CLIENT_SECRET,
      configuration.ISSUER,
      context.request.query.token,
      postVerify
    );
  }
}

И мой редирект компоненты .ts

export class RegisterComponent implements OnInit {
  token: string;
  profile: any;
  constructor(private http: HttpClient,private activatedRoute: ActivatedRoute, private auth: AuthService) {
  }

  ngOnInit() {
    this.activatedRoute.queryParams.subscribe(params => {
      const token = params['token']
      const state = params['state'];
      console.log(token);
      const headers = new HttpHeaders({
        'Authorization': 'Bearer '+token
      });
      this.http.get('https://'+environment.domain+'/userinfo', {headers: headers}).subscribe((data: any) => {
      this.profile = data;
      console.log(this.profile);
    });
      }
    );
  }

}

Я думаю, что проблема в моем правиле, где я подписываю токен. Я не знаю, что именно должен быть закрытый ключ, и если я вообще делаю подписывающий токен.

...