передача свойств в функцию обратного вызова nodejs - PullRequest
1 голос
/ 01 мая 2020

Я использую paypal-rest-sdk . Проблема, с которой я сталкиваюсь, заключается в том, что когда я делаю вызов authorizationUrl, я хочу передать некоторые параметры, к которым можно получить доступ в перенаправленном URL.

Ниже приведен мой код

 import paypal from 'paypal-rest-sdk';
 const openIdConnect = paypal.openIdConnect;

  paypal.configure({
                mode: "sandbox" 
                client_id: //MyClientId,
                client_secret: //MySecretId,
                openid_redirect_uri: `http://myRedirectionEndpoint/account/domestic/paypal/callback?state={accountId:5e8c2291d69ed1407ec86221}`
               });

  openIdConnect.authorizeUrl({scope: 'openid profile'});

При добавлении параметра запроса состояние выдает ошибку как недопустимое redirectUri

Каков наилучший способ передачи данных, которые необходимо использовать после перенаправления

1 Ответ

0 голосов
/ 01 мая 2020

Я думаю, вы немного не понимаете, как работает oauth-авторизация. В основном, если вы хотите получить какие-либо данные, вам нужно сделать это ПОСЛЕ того, как вы воспользуетесь обратным вызовом и подтвердите пользователя в вашей системе.

Вы когда-нибудь видели, чтобы Google / github et c openid auth поставщик возвращал некоторые данные, которые соответствуют данным системы вызывающего абонента? Это невозможно.

Вы, вероятно, путаете это с webhook, когда вызывающая система вызывает webhook с некоторыми данными внутри себя, и вы фиксируете их. Который обычно используется в платежных транзакциях.

Но аутентификация немного отличается. Для аутентификации есть 3 системы.

  1. фактический поставщик аутентификации (Paypal / google / github) et c.
  2. провайдер идентификации , который в основном получает данные профиля и c, и кроме систем предприятия, эти две системы просто одинаковы.
  3. система вызова, которая является вашей NodeJS service в этом случае.

=> Теперь вызывающая система вызывает провайдера аутентификации для получения какого-либо кода, обычно кода авторизации. Это означает, что пользователь существует в системе аутентификации, скажем, Google.

=> Затем вызывающая система вызывает провайдера идентификации с этим кодом авторизации, проверяя, есть ли пользователь в провайдере идентификации (idp). ) и idp возвращает access_token, id_token, refresh_token и т. д. c (как я говорил в большинстве случаев, это одни и те же системы). Но рассмотрим Amazon, скажем, вы хотите войти в Amazon с помощью вашей Google учетной записи. У вас есть учетная запись Google , но у вас нет учетной записи amazon. Таким образом, вы получите код авторизации, но не получите id_token.

=> Теперь id_token большую часть времени содержит некоторую основную c информацию о пользователе в формате JWT. Но теперь ACCESS_TOKEN используется для выполнения всех других вызовов вашей системы (вызывающей системы). Теперь, как я сказал id_token, какие-то пользовательские данные. В вашей службе NodeJs может быть ИД пользователя для сопоставления таблиц БД с номером учетной записи.

=> Создайте конечную точку для получения номера учетной записи или чего-то, что принимает access_token и id_token. Сначала проверьте access_token и проверьте подпись id_token, затем расшифруйте токен, чтобы получить основную c информацию о пользователе. и используйте этот идентификатор для извлечения данных из вашей таблицы и использования этих данных.

После редактирования:

Вы можете увидеть в do c:

paypal.configure({
  'openid_client_id': 'CLIENT_ID',
  'openid_client_secret': 'CLIENT_SECRET',
  'openid_redirect_uri': 'http://example.com' });

// Authorize url
paypal.openIdConnect.authorizeUrl({'scope': 'openid profile'});

// Get tokeninfo with Authorize code
paypal.openIdConnect.tokeninfo.create("Replace with authorize code", function(error, tokeninfo){
  console.log(tokeninfo);
});

// Get userinfo with Access code
paypal.openIdConnect.userinfo.get("Replace with access_code", function(error, userinfo){
  console.log(userinfo);
});

Когда вы получаете код авторизации, вы используете его для вызова paypal.openIdConnect.tokeninfo.create и получения токенов. Затем используйте эти токены для вызова paypal.openIdConnect.userinfo.get, чтобы получить информацию о пользователе. Теперь, когда вы получите информацию о пользователе, вы сможете создать строку базы данных, которую вы хотели создать.

Вы можете добавить эти два вызова ниже в ваш маршрут /callback.

...