/ / IdentityServer3 Token Validation - Wyjątek w EmitCorsResponseHeaders po niewystarczającym zakresie w tokenie dostępu - token dostępu, serwer tożsamości3, token-nośnik

IdentityServer3 Token Validation - Wyjątek w EmitCorsResponseHeaders po niewystarczającym zakresie w tokenie dostępu - access-token, identityserver3, okazja-token

Założyłem podstawowy projekt WebApi zgodnie z tym przewodnikiem https://identityserver.github.io/Documentation/docsv2/overview/jsGettingStarted.html

Sprawdzanie tokenów działa dobrze, jeśli przekazuję prawidłowy zakres APi w tokenie, ale jeśli nie jest dołączony (jeśli użytkownik odmawia dostępu), to kontynuuje dodawanie 403 do odpowiedzi zgodnie z oczekiwaniami.

W EmitCorsResponseHeaders (ScopeRequirementMiddleware.cs) idzie dodać nagłówki CORS, ale zgłasza wyjątek -

[ArgumentException: The key "Access-Control-Allow-Origin" is already present in the dictionary.]
Microsoft.Owin.Host.SystemWeb.CallHeaders.AspNetResponseHeaders.Add(String key, String[] value) +178
IdentityServer3.AccessTokenValidation.ScopeRequirementMiddleware.EmitCorsResponseHeaders(IDictionary`2 env) in c:localidentityserver3AccessTokenValidationsourceAccessTokenValidationPlumbingScopeRequirementMiddleware.cs:97

Czy to się dzieje, czy jest coś, co przeoczyłem? app.UseCors (CorsOptions.AllowAll) jest ustawiona w pliku startup.cs, jak określono w przewodniku dla początkujących.

Dzięki

Odpowiedzi:

2 dla odpowiedzi № 1

Tutaj rzeczywiście jest problem, ale nie jestem całkowicie pewien, jak rozwiązać ten problem.

The ScopeRequirementMiddleware próbuje ustawić Allow-Access-Control-Origin nagłówek odpowiedzi, ale robi to tylko wtedy, gdy nie jest spełnione wymaganie zakresu określone w oprogramowaniu pośredniczącym.

To oczywiście kłóci się z faktem, że już wcześniej mamy oprogramowanie pośrednie CORS w potoku OWIN, który już ustawił ten konkretny nagłówek.

Nie jestem pewien, dlaczego oprogramowanie pośredniczące do wymagań zakresu ustawia te nagłówki w tym konkretnym przypadku, utworzę problem na GitHub i powiążę go tutaj w celu zwiększenia widoczności.