Správičky 2 797 Blogy 945 Fórum 18 537

CORS + OpenId Connect

photo
liero
2. 10. 2017 13:47:33
Body: 9295
Najaktívnejší č.: 6

CORS + OpenId Connect

Neriesili ste niekedy SSO authentifikaciu, kde WebAPI server bol na inej domene, ako SPA aplikacia (html/js klient), ktoru bolo treba authentifikovat?

Rozbehal som si u seba OpenIdConnect authentifikaciu voci externemu Identity Providerovi (Azure AD). Funguje to, pokial je klient a web api na tej istej domene, napr localhost. Ked presuniem napr backend do azure, uz neviem klienta authentikovat.

Tusim v com je problem, len neviem presne ako ho fixnut.

Login funguje tak, ze zavolam /Account/Login, co ma presmeruje na skutocny login Identity Providera -

public async Task Login(string returnUrl = null)
{
    await HttpContext.ChallengeAsync(
         OpenIdConnectDefaults.AuthenticationScheme,
         new AuthenticationProperties { RedirectUri = returnUrl });
}

Predpokladam, ze Idenity Provider vrati token, ktory je platny pre domenu na ktorej bezi server, nie klient. Ked nezadam ziadnu RedirectUri, tak ma presmeruje na backend url.

[Reakcia]

photo
harrison314
2. 10. 2017 17:05:09
Body: 1070
Najaktívnejší č.: 24

RE: CORS + OpenId Connect

Vitaj v mojom svete :D

Robim s Identity Sereverom 4, nie z Azure AD, ale to to bude hadam podobne.

1. Skontroluj si ci ti na API klienta dojde Barer hlavicka.

2. Pre daneho klienta by si mal mat vytvoreny API scope (neviem, ci nieco take funguje aj v Azure AD).

3. Pouzitim GetTokenAsync  vytiahni id token, a ten pouzi ako Barer hlavicku pri volani API.

 

Je to stara ukazka ale skus sa aspon inspirovat https://github.com/IdentityServer/IdentityServer4.Samples/blob/ceaf10d3c8ea8848fa13c591c82bfcb7dbf47d0b/MVC%20and%20API/src/AspNetCoreAuthentication/Controllers/HomeController.cs 

[Reakcia]

photo
liero
2. 10. 2017 17:26:31
Body: 9295
Najaktívnejší č.: 6

RE: CORS + OpenId Connect

Mozno som mal spomenut ze pouzivat OIDC Implicit flow.

Anyway, problem sa nasiel:

var xhr = new XMLHttpRequest();
xhr.withCredentials = true; //required for CORS

 

vid: https://docs.microsoft.com/en-us/aspnet/core/security/cors#credentials-in-cross-origin-requests

[Reakcia]

photo
liero
5. 10. 2017 11:03:13
Body: 9295
Najaktívnejší č.: 6

RE: CORS + OpenId Connect

Nuz, dane riesenie funguje v Edge, ale nefunguje v Chrome...

Ked porovnam request headers, tak Edge posiela v cookies ARRAfinity=... a AspNetCore.Cookies=..., Chrome iba to prve...

[Reakcia]

photo
harrison314
5. 10. 2017 16:55:39
Body: 1070
Najaktívnejší č.: 24

RE: CORS + OpenId Connect

Nepersahuje to maximalnu povolenu dlzku cookies? S tym som uz pri chrome mal problem.

[Reakcia]

photo
liero
6. 10. 2017 11:38:37
Body: 9295
Najaktívnejší č.: 6

RE: CORS + OpenId Connect

Existuje nieco ako SameSite atribut pre cookies. Zatial to implementuje Chrome a Opera. V asp.net core 2.0 je by default nastaveny na SameSite=lax. 

Riesenie: 

services.AddAuthentication(...)
         .AddCookie(option => option.Cookie.SameSite = SameSiteMode.None)

 

 

[Reakcia]



Najaktívnejší užívatelia
1. 37750 b. photo vlko
2. 21310 b. photo T
3. 15955 b. photo spigi
4. 15450 b. photo Anonymous
5. 11110 b. photo dudok
6. 9295 b. photo Liero
7. 6885 b. photo siro
8. 6245 b. photo slavof
9. 5355 b. photo duracellko
10. 4445 b. photo xxxmatko