首页 文章

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

提问于
浏览
0

我正在编写一个带有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 回答

  • 0

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

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

    但是,这不起作用 . 当我移动该行以忽略“Token”到顶部时它工作:

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

相关问题