/ / IdentityServer3トークンの検証 - アクセストークン内のスコープが不十分な場合のEmitCorsResponseHeadersでの例外 - access-token、identityserver3、bearer-token

IdentityServer3トークンの検証 - アクセストークンのスコープが不十分な場合のEmitCorsResponseHeadersの例外 - アクセストークン、identityserver3、ベアラトークン

ここのガイドに従って基本的な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で問題を作成し、ここにリンクして見やすくします。