ここのガイドに従って基本的なWebApiプロジェクトを設定しました https://identityserver.github.io/Documentation/docsv2/overview/jsGettingStarted.html
トークンの検証に正しいAPIスコープを渡した場合、トークン検証は問題なく動作しますが、含まれていない場合(ユーザーがアクセスを拒否した場合)、期待どおりレスポンスに403が追加されます。
EmitCorsResponseHeaders(ScopeRequirementMiddleware.cs)では、CORSヘッダーを追加しますが、例外をスローします -
[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
これは起こっているべきですか私が逃した何かがありますか? app.UseCors(CorsOptions.AllowAll)は、スタートアップガイドの指定に従ってstartup.csに設定されています。
ありがとう
回答:
回答№1は2確かにここに問題があります、しかし、私はそれをどのように解決するかについて完全に確信がありません。
ザ ScopeRequirementミドルウェア を設定しようとします Allow-Access-Control-Origin
応答にはヘッダーがありますが、ミドルウェアに設定されているスコープ要件が満たされていない場合に限ります。
これは明らかに、すでにこの特定のヘッダを設定しているOWINパイプラインの早い段階でCORSミドルウェアをすでに持っているという事実と矛盾します。
私は、なぜスコープ要件ミドルウェアがこの特定のケースでこれらのヘッダを設定するのかわからないので、GitHubで問題を作成し、ここにリンクして見やすくします。