Solicitar token de acceso con id_token, ADFS 2016 y react-adal
Tengo una aplicación del lado del cliente que estoy autenticando con ADFS y react-adal y tengo la mayoría funcionando, pero parece que no puedo encontrar una manera de solicitar el token de acceso (y, por lo tanto, actualizar el token) con id_token, que es todo lo que obtengo a cambio de ADFS.
En el momento en que la aplicación React reenvía al usuario a ADFS para que inicie sesión, esto autentica el token y quiero poder obtener la información de usuario (Nombre, Apellido, roles, etc.) desde el punto final / adfs / userinfo pero necesita la ficha de portador para hacerlo.
Actualmente mi función componentWillMount se ve así
componentWillMount = () => {
axios.get('/home/AuthenticationContext').then((response) => {
this.adalAuthentication = new AdalAuthentication(response.data);
if (this.adalAuthentication.authenticateToken()) { // checks if authenticated with adfs, not app
var error = this.adalAuthentication.Instance.getLoginError();
if (error === "") {
axios({
method: 'get',
url: '/identity/completeLogin/' + this.adalAuthentication.Instance.getCachedToken(this.adalAuthentication.Instance.config.clientId)
}).then((response) => { console.log(response) })
this.setState({
loggedIn: true
});
}
else {
this.setState({
error: error
});
}
}
}
El punto en el que estoy atrapado es el segundo método de obtención de axios, esto golpeó una acción del controlador en el mismo origen.
[HttpGet("completeLogin/{id_token}")]
public async Task<IActionResult> CompleteLogin(string id_token)
{
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer" + id_token);
var response = await client.GetAsync("https://adfs.domain/adfs/userinfo");
return View();
}
Por supuesto, la respuesta vuelve sin autorización. No puedo encontrar ninguna información sobre cómo obtener un token de acceso de id_token o alguna forma de obtener un token de acceso de React en el front-end usando la biblioteca Adal.js, ¿alguien ha superado esto?
EDIT: la única información que obtengo de id_token está debajo.
"userName":"[email protected]",
"profile": {
"aud":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"auth_time":1544777683,
"exp":1544793006,
"iat":1544789406,
"iss":"https://adfs.domain/adfs",
"mfa_auth_time":1544777705,
"nonce":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"sid":"x-x-x-xx-xxxxxxxxxx-xxxxxxxx-xxxxxxxxxx-xxxx",
"sub":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"unique_name":"T1234\\bob",
"upn":"[email protected]"
}