Web API 2 OWIN承载令牌认证/如何更改/令牌路径

时间:2017-03-03 18:16:08

标签: authentication asp.net-web-api owin single-page-application

我正在编写一个带有OWIN身份验证的SPA应用程序。最初我的应用程序是作为IIS中的默认应用程序运行而构建的,因此我的授权选项看起来像这样(TokenEndpointPath =“/ Token”)

OAuthOptions = new OAuthAuthorizationServerOptions
            {
                //Exposes Token endpoint
                TokenEndpointPath = new PathString("/Token"),
                //Use ApplicationOAuthProvider in order to authenticate
                Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),
                AuthorizeEndpointPath = new PathString("/MyApp/api/Account/ExternalLogin"),
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), //Token expiration => The user will remain authenticated for 14 days
                AllowInsecureHttp = true                
            };

但是,我需要移动它,以便它不再是默认应用程序,而是默认IIS应用程序中的子应用程序,我的所有api调用都将从此路径开始:

http://localhost:22657/

为:

http://localhost:22657/MyApp

因此,/ Token路径不再可达。所以,我把我的TokenEndpointPath改为:

TokenEndpointPath = new PathString("/MyApp/Token"),

但是,当我验证我的浏览器成功进行调用时,来自服务器的响应是来自我的Index.cshtml文件的HTML。我不知道如何诊断为什么WebApi正在以这种方式处理请求(显然没有被OWIN处理。当我在我的GrantResourceOwnerCredentials方法上设置断点时,断点没有被击中)。

我的所有WebApi路线都没有配置“令牌”。

1)有没有人知道端点发生了什么,以及为什么它返回html而不是持票人令牌或我应该如何排除它?

更新

我猜它必须与指定索引的以下默认路由相关。这导致对/ MyApp / Token的请求被路由到Home / Index。是否有其他东西可以代替“{* url}”来阻止这种情况?

routes.MapRoute(
                name: "Default",
                url: "{*url}",
                defaults: new { controller = "Home", action = "Index" }
            );

1 个答案:

答案 0 :(得分:0)

MVC拦截了对WebApi / MyApp / Token端点的调用。在尝试让MVC忽略这条路线时,我添加了下面的第二行:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{Token}");

然而,这不起作用。当我移动该行以忽略“Token”到顶部时它起作用:

routes.IgnoreRoute("{Token}");
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");