Аутентификация docusign через Rails API (Omniauth + Devise) + JS Frontend - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь создать поток аутентификации, используя Auth Code Grant, где я добавил необходимую стратегию omniauth для Docusign для создания /auth/docusign маршрутов только в приложении Rails API.

Вот шаги, которые я выполнил. Выдаю запрос на маршрут от клиента VueJS. window.open("http://localhost:4000/auth/docusign", "targetWindow", "width=350,height=250")

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

class SessionsController < Devise::SessionsController
  def docusign
    internal_destroy
    @success = false
    userinfo = request.env['omniauth.auth']
    request_info = request.env['omniauth.params'] 
    if userinfo
      info = userinfo.info
      cred = userinfo.credentials
      user = User.find_by(email: info['email']) || User.find_by(id: session[:user_id])
      if user
        organization = user.organization
        organization.organization_providers.where(provider_name: 'Docusign').destroy_all
        OrganizationProvider.create(email: info['email'], token_expires_at: Time.at(cred['expires_at']), token_expires_at: Time.now, provider_name: 'Docusign', organization_id: organization.id, token: cred.token)
        @success = true
      end 
    end 
    render 'sessions/docusign'      
  end
end

Я хотел бы передать некоторые параметры (к которым я обращаюсь в обратном вызове как request.env['omniauth.params']) для выполнения некоторых бэкэнд-задач в методе. Когда я пытаюсь window.open("http://localhost:4000/auth/docusign?email='"+email+"'", "targetWindow", "width=350,height=250")

, он говорит, что URL-адрес не соответствует ни одному URL-адресу перенаправления

Я также пытался передать redirect_to('/auth/docusign', query: query), но при этом он не открывается в браузере из-за CORS.

Я также пытаюсь установить его в сеансе cook ie, но, поскольку это сервер только API, я все еще работаю над настройкой cookie store.

Вопрос Как лучше всего этого добиться? Чтобы передать некоторые параметры в обратном вызове и получить их.

Затем поток выполнения продолжается на сервере Rails, и окно обслуживает страницу с соответствующим ответом в соответствии со статусом аутентификации. Однако в это время окно клиента, запустившее запрос, не знает о результате аутентификации.

Вопрос Как я могу сообщить клиенту VueJS, что процесс аутентификации завершен?

Вопрос Правильно ли я выполняю описанный выше поток или есть какие-то лучшие способы добиться того же?

Заранее спасибо

1 Ответ

0 голосов
/ 09 июля 2020

Вам необходимо войти в свою учетную запись разработчика DocuSign, нажать «Администратор» и go в левой навигационной панели вниз до «API и ключи», где вы можете найти установленный вами ключ интеграции. Вы его установили? Если вы это сделали, вы должны найти его, а затем добавить redirectUri в настройки OAuth для этого ключа (идентификатор клиента в OAuth). Вот почему логин DocuSign сообщает вам, что redirectURI не совпадает. Вы можете добавить http://localhost: 4000 / auth в список, и это должно работать для вашего локального env.

Вы не можете вставить пользовательские переменные в redirectUri, он должен соответствовать точно в тот, который вы вошли. Если вам нужно передать ему значения, есть способ сделать это с помощью состояния.

Вот как должен выглядеть URL-адрес, обратите внимание на его часть &state=:

https://account-d.docusign.com/oauth/auth?
response_type=code
&scope=YOUR_REQUESTED_SCOPES
&client_id=YOUR_INTEGRATION_KEY
&state=YOUR_CUSTOM_STATE
&redirect_uri=YOUR_REDIRECT_URI
&login_hint=YOUR_LOGIN_HINT

Вы можете поместить туда все, что хотите (конечно, в кодировке URI), и это значение вернется к вам при перенаправлении обратно также с параметром & state =. Это решает проблему и позволяет передавать аргументы обратно в URI перенаправления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...