SPA calling a WebAPI calling a WebAPI

243 Views Asked by At

I am building a SPA (javascript) which will call WebAPI A (.net MVC API) and which in turn will call (server side) WebAPI B (.net MVC API).

All three entities are protected by ADFS4 (OAuth2). In my workflow I want WebAPI A to call WebAPI B on behalf of the user who has logged into the SPA. In reading the various documentation by Microsoft I found that the scenario described in the following article applies best to my case:

https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/development/ad-fs-on-behalf-of-authentication-in-windows-server

The article assumes that the client application can perform the authorization grand flow. Nevertheless in my case I am dealing with a SPA which should be using the implicit flow of OAuth2. In addition even if I wanted to use the authorization grand flow I would still need to do a POST on the token endpoint of ADFS from the SPA which is not possible as ADFS4 does not offer a way to add CORS headers. I could of course deploy a proxy in front of it and add the headers... I have not explored this option yet.

I found a solution to make this work but it seems more like a hack to me; The SPA during login requests two tokens (1 for WebAPI A and 1 for WebAPI B) from ADFS4. It passes both tokens to the WebAPI A which knows that the 2nd token is for accessing WebAPI B.

Does this solution seem correct? Should I be doing something differently?

Thank you!

PS: 1) SPA cannot accesss directly WebAPI B as it is accessible only internally. 2) Assume I have total control over development on all three entities.

1

There are 1 best solutions below

0
On

it's not a good idea to use the authorization code flow for SPA application, because you have to really keep the secret key that can generate access_token, which is not secure in that case.

i suggest that you use the implicit flow for you spa application and between your servers use the authorization code flow, this way you are sure about security