Active Directory 联合身份验证服务 response_mode=form_post 正在尝试 post 对应用程序作出反应

Active Directory Federation Service response_mode=form_post trying to post to react application

当我们尝试通过 response_type = form_post 连接到 ADFS 系统时出现问题。

我们必须通过 ADFS 为我们的 React 应用程序实现安全性。我们考虑实施 response_mode=form_post 以便 id_token 将作为一个变量以 posted 的形式返回到我们的应用程序。我们也采用这种方法来确保我们的 id_token 不暴露在 URL 中。此外,当我们需要来自 ADFS 的额外声明时,唯一的方法是通过 response_mode=form_post 请求。但是如果我们尝试那样做,我们将以 post 的形式获得 id_token 但我们的 React 应用程序会抛出 "Cannot Post" 错误,因为应用程序只能通过 GET.[=14 呈现=]

我们试过的样本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

我们希望我们的应用程序获得 posted 响应并将其用于来自 id_token 的身份验证和用户信息,而不是告知 "Cannot Post" 错误。我们如何才能做到这一点?非常感谢任何帮助。

我终于找到了一种方法,可以使用 redirect_uri 作为我的 node-js 服务器 例如 从 reactapp 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 服务器中,在 login get api 中,我们将其重定向到 fedservice 授权 api,如下所示

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 层处理它,能够在前端没有太大变化的情况下实现授权