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}");