0

我正在使用OWIN认证编写SPA应用程序。最初,我的应用程序的建立是为了在IIS等我的授权选项的默认应用程序运行这个样子(TokenEndpointPath =“/令牌”)Web API 2 OWIN不记名令牌认证/如何更改/令牌路径

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 

因此,/令牌路径不再可达。所以,我改变了我的TokenEndpointPath是:

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

然而,当我验证自己的浏览器成功地进行呼叫,不过,从服务器的响应是从我Index.cshtml文件的HTML。我不知道如何诊断为什么WebApi以这种方式处理请求(这显然不是由OWIN处理的。当我在我的GrantResourceOwnerCredentials方法上设置断点时,断点未被命中)。

我的WebApi路由都没有配置“Token”。

1)有人知道端点上发生了什么,为什么它返回的是html而不是不记名令牌,或者我该如何解决它?

更新:

我猜它必须与指定索引以下缺省路由。这导致请求/ MyApp/Token被路由到Home/Index。有什么我可以用来代替“{* url}”以防止这种情况?

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

回答

0

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

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

但是,这不起作用。当我移动该行忽略“令牌”到顶端它的工作:

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