我正在编写一个带有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" }
);
答案 0 :(得分:0)
MVC拦截了对WebApi / MyApp / Token端点的调用。在尝试让MVC忽略这条路线时,我添加了下面的第二行:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{Token}");
然而,这不起作用。当我移动该行以忽略“Token”到顶部时它起作用:
routes.IgnoreRoute("{Token}");
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");