我正在编写一个带有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路线都没有配置“Token” .
1)有没有人知道 endpoints 发生了什么,为什么它返回html而不是持票人令牌或者我应该如何排除它?
更新:
我想它必须与指定索引的以下默认路由相关 . 这导致对/ MyApp / Token的请求被路由到Home / Index . 还有什么我可以用来代替“{* url}”来防止这种情况吗?
routes.MapRoute(
name: "Default",
url: "{*url}",
defaults: new { controller = "Home", action = "Index" }
);
1 回答
MVC拦截了对WebApi / MyApp / Token endpoints 的调用 . 在尝试让MVC忽略这条路线时,我添加了下面的第二行:
但是,这不起作用 . 当我移动该行以忽略“Token”到顶部时它工作: