如何配置IIS URL重写模块以在URL上使用“HTML 5 pushState”样式和散列片段?

时间:2017-01-05 21:22:49

标签: angularjs angular iis url-rewriting

Angular 2有一个 PathLocationStragy 用于处理html5路由,一个 HashLocationStrategy 用于处理路由上的哈希片段'#'。

这里的问题是当我们使用OIDC(OpenID Connect)进行用户身份验证和 PathLocationStragy (或 html5mode 用于AngularJS上的路由)时,因为某些流上的OpenID会在之后返回数据用户使用网址登录后重定向回网站后的“#”片段如下: http://mysite/callback#code=7b60c0570d7c4da0fc60678c0e46deadd5eeab0a659203fd44efb7cd51b2cdab&id_token=eyJhb ...

对于html5路由,IIS Url Rewrite的设置非常常见:

... <system.webServer> <rewrite> <rules> <remove name="AngularJS Routes" /> <rule name="AngularJS Routes" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <add input="{REQUEST_URI}" pattern="/(api)/" negate="true" /> </conditions> <action type="Rewrite" url="/" /> </rule> </rules> </rewrite> </system.webServer> ...

但是当用户记录此请求的响应后,Web服务器从Authorization Server收到带http://mysite/callback#code=7b60c0570d7c4d的URL为:403 - Forbidden: Access is denied.

我认为问题在于Url重写设置,而不是AngularJS或Angular 2应用程序...... 怎么解决?如何使用带有html5路由样式的AngularJS / Angular 2和OpenID Connect?

1 个答案:

答案 0 :(得分:1)

片段值不会发送到服务器,它们仅由浏览器在客户端处理。浏览器仅发送http://mysite/callback