我有带有开放ID连接身份验证的asp.net core 2.1应用程序:
services.AddAuthentication(...)
.AddCookie(...)
.AddOpenIdConnect(...);
未经身份验证的用户访问URL: /path?somequery#somehashfragment
时,它将重定向到身份验证提供程序的登录页面,然后重定向回 /path?somequery
,但是哈希片段被剥离。
答案 0 :(得分:2)
URL哈希片段不会从浏览器中消失。这意味着,如果将哈希片段放在浏览器中的URL上并访问它,则片段将不会到达服务器端。解决方案是使该参数成为查询参数。
从OIDC角度来看,此方法用于隐式流,以防止令牌窃取。规范的Implicit Flow Threats section中对此进行了突出显示。
答案 1 :(得分:1)
使用Aurelia作为前端框架解决此问题。这实质上破坏了应用程序的重定向URL功能,因为Aurelia使用#来确定其内部路由。
经过反复试验,我发现如果哈希是经过url编码的,那么它将正确传递到服务器。将少量的javascript附加到login.cshtml文件即可解决此问题。
<script>
if (window.location.hash && window.location.hash != '') {
window.location.href = window.location.origin +
window.location.pathname +
window.location.search +
encodeURIComponent(window.location.hash);
}
</script>
希望这会有所帮助!