最后我找到了一种可以使用redirect_uri作为我的node-js服务器的方法所以例如从reactapp App.js构造函数我重定向到获取在nodejs层中编写的api说
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 层处理它,能够在前端没有太大变化的情况下实现授权