为 ASP API 令牌请求启用 CORS

Posted

技术标签:

【中文标题】为 ASP API 令牌请求启用 CORS【英文标题】:Enable CORS for ASP API Token request 【发布时间】:2014-10-24 08:14:12 【问题描述】:

我有一个项目,它同时具有 API 和包含一些 Web 表单的区域。 最近 API 的 Token 端点开始抛出 CORS 错误,我不知道为什么或如何修复它。

我已将 Startup.Auth.cs 文件更新为:app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

还尝试将config.EnableCors(new EnableCorsAttribute("*", "*", "GET,POST")); 添加到 WebApiConfig.cs 文件中。

这些都没有添加所需的“Access-Control-Allow-Origin”标头。 (如果同时实现这两个,我会得到不同的错误,所以我知道这不是问题。)

我需要设置项目中的其他位置以允许 CORS 请求身份验证令牌吗?

【问题讨论】:

【参考方案1】:

好的,找到问题了。

首先,我的测试工具指向了错误的位置,所以我所做的任何更改都没有效果,我的断点也没有被击中。我的错。

其次,最终让我工作的配置是具有以下代码:

ApplicationOAuthProvider.GrantResourceOwnerCredentials:
var allowedOrigin = context.OwinContext.Get<string>("as:clientAllowedOrigin");
if (allowedOrigin == null) allowedOrigin = "*";


WebApiConfig.Register:
config.EnableCors(new EnableCorsAttribute("*", "*", "GET,POST"));

我希望这可以帮助其他在 CORS 和 Katana/OWIN 中间件方面苦苦挣扎的人。

【讨论】:

【参考方案2】:

我必须在 ApplicationOAuthProvider.cs/GrantResourceOwnerCredentials 中这样做才能工作。前三行仅供参考,添加了“context.OwinContext”行以使其工作。

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        
            var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();

            ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);

            **context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[]  "http://localhost:24589" );**

如果您想在不同的接入点单独配置和允许 CORS,请使用上述方法。如果您想允许应用程序范围,那么您可以修改 ApplicationOAuthProvider.cs/ConfigureAuth,如下所示。两种方法都有效。

public void ConfigureAuth(IAppBuilder app)
    

        app.UseCors(CorsOptions.AllowAll);

【讨论】:

+1 第二种方法是快速修复。您只需添加Microsoft.Owin.Cors nuget 包。 SO ***.com/questions/20079813/… 上的另一个非常有用的线程【参考方案3】:

在 WebApiConfig.cs 中启用 CORS 后,您还应该配置 web.config 以启用 CORS。它在我的应用程序中工作:

<system.webServer>
    <!--Enbale CORS-->
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="http://yourwebsite" />
      </customHeaders>
    </httpProtocol>
    <modules>
    ...
    </modules>
</system.webServer>

【讨论】:

以上是关于为 ASP API 令牌请求启用 CORS的主要内容,如果未能解决你的问题,请参考以下文章

Web Api 2 Preflight CORS 请求承载令牌

mvc web api身份验证令牌cors问题

使用凭据启用 Cors .web api core 1.1

web api - asp.net 身份令牌即使对于后续请求也会过期

Angular 2 使用 ASP.NET 身份令牌登录

每当我发送包含 Bearer 令牌的请求时,ASP.Net Core API 总是返回 401 未授权