IdentityServer3 令牌验证 - 访问令牌范围不足后 EmitCorsResponseHeaders 出现异常
IdentityServer3 Token Validation - Exception in EmitCorsResponseHeaders after insufficient scope in access token
我已经根据这里的指南建立了一个基本的WebApi项目https://identityserver.github.io/Documentation/docsv2/overview/jsGettingStarted.html
如果我在令牌中传递正确的 api 范围,令牌验证就可以正常工作,但如果不包含它(如果用户拒绝访问),那么它将继续按预期向响应添加 403 .
在 EmitCorsResponseHeaders (ScopeRequirementMiddleware.cs) 中添加 CORS headers 但抛出异常 -
[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:\local\identity\server3\AccessTokenValidation\source\AccessTokenValidation\Plumbing\ScopeRequirementMiddleware.cs:97
这应该发生还是我错过了什么? app.UseCors(CorsOptions.AllowAll) 在 startup.cs 中设置,如入门指南中所述。
谢谢
这里确实有问题,但我不太确定如何解决它。
ScopeRequirementMiddleware 尝试在响应中设置 Allow-Access-Control-Origin
header,但只有在未满足中间件中设置的范围要求时才会这样做。
这显然与我们早先在 OWIN 管道中已经设置了这个特定 header.
的 CORS 中间件这一事实相冲突
我不确定为什么范围要求中间件在这种特定情况下设置这些 headers,我将在 GitHub 和 link 上创建一个问题返回这里能见度。
我已经根据这里的指南建立了一个基本的WebApi项目https://identityserver.github.io/Documentation/docsv2/overview/jsGettingStarted.html
如果我在令牌中传递正确的 api 范围,令牌验证就可以正常工作,但如果不包含它(如果用户拒绝访问),那么它将继续按预期向响应添加 403 .
在 EmitCorsResponseHeaders (ScopeRequirementMiddleware.cs) 中添加 CORS headers 但抛出异常 -
[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:\local\identity\server3\AccessTokenValidation\source\AccessTokenValidation\Plumbing\ScopeRequirementMiddleware.cs:97
这应该发生还是我错过了什么? app.UseCors(CorsOptions.AllowAll) 在 startup.cs 中设置,如入门指南中所述。
谢谢
这里确实有问题,但我不太确定如何解决它。
ScopeRequirementMiddleware 尝试在响应中设置 Allow-Access-Control-Origin
header,但只有在未满足中间件中设置的范围要求时才会这样做。
这显然与我们早先在 OWIN 管道中已经设置了这个特定 header.
的 CORS 中间件这一事实相冲突我不确定为什么范围要求中间件在这种特定情况下设置这些 headers,我将在 GitHub 和 link 上创建一个问题返回这里能见度。