为ASP API令牌请求启用CORS

时间:2014-08-30 13:58:44

标签: asp.net-mvc cors token

我有一个既有API又有包含一些网页表单的区域的项目 最近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请求吗?

3 个答案:

答案 0 :(得分: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 :(得分: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 :(得分:1)

在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>