Служба федерации Active Directory response_mode = form_post пытается опубликовать для реагирования приложения - PullRequest
0 голосов
/ 11 июля 2019

У нас проблема здесь, когда мы пытаемся подключиться к системе ADFS через response_type = form_post.

Мы должны реализовать безопасность для нашего приложения React через ADFS. Мы подумали о реализации response_mode = form_post, чтобы id_token был представлен в виде переменной в форме, отправленной обратно в наше приложение. Также мы пошли с этим подходом, чтобы обезопасить наш id_token от показа в URL. Также, когда нам нужны дополнительные претензии от ADFS, единственный способ - запрос через response_mode = form_post. Но если мы попытаемся таким образом, мы получим id_token в посте формы, но наше приложение реакции выдает ошибку «Cannot Post», поскольку приложение может быть обработано только через GET.

Пример URL, с которым мы пробовали, как показано ниже

https://example.fedservice.com/adfs/oauth2/authorize?response_type=id_token&redirect_uri=https://localhost:4000/&client_id=sample_client_id&nonce=12345&response_mode=form_post

Мы бы хотели, чтобы наше приложение получило опубликованный ответ и использовало его для аутентификации и информации о пользователе из id_token вместо сообщения об ошибке «Cannot Post». Как мы можем включить это? Любая помощь очень ценится.

1 Ответ

0 голосов
/ 14 июля 2019

Наконец-то я нашел способ использовать redirect_uri для моего сервера node-js Так например Из реактивного приложения App.js я перенаправляю на API, который был написан в слое nodejs. http://mynodejsserver.com/login

constructor(props: any) {
    super(props)
    let idToken = localStorage.getItem('id_token')
    if (!idToken) {
      idToken = getCookie('idToken')
    }
    if (idToken) {
      localStorage.setItem('id_token', idToken)
    } else {
      window.location.href = `http://mynodejsserver.com/login?url=${window.location
        .pathname + window.location.search}`
    }
    this.state = {
      idToken,
    }
  }

На сервере nodejs, при входе в систему получить API, мы сделали это для перенаправления на API авторизации fedservice, как показано ниже

app.get('/login', function(req, res) {
    const clientURLToRedirect = req.query.url
    res.redirect(

      `https://example.fedservice.com/adfs/oauth2/authorize?response_type=id_token&redirect_uri=http://mynodejsserver.com/id_token?route=${clientURLToRedirect}&client_id=sample_client_id&nonce=12345&response_mode=form_post`
    )
  })

  app.post('/id_token', function(req, res) {
    var idToken = req.body.id_token
    var url = req.query.route
    console.log(idToken)
    res.cookie('idToken', idToken)
    res.redirect('http://localhost:4000' + url) // my react app url
  })

Таким образом, удалось достичь авторизации без особых изменений во внешнем интерфейсе, обработав его в слое nodejs

...