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?
答案 0 :(得分:1)
片段值不会发送到服务器,它们仅由浏览器在客户端处理。浏览器仅发送http://mysite/callback