如何在身份验证提供程序的重定向uri中包含哈希片段

时间:2018-07-30 09:09:44

标签: url asp.net-core openid-connect

我有带有开放ID连接身份验证的asp.net core 2.1应用程序:

services.AddAuthentication(...)
    .AddCookie(...)
    .AddOpenIdConnect(...);

未经身份验证的用户访问URL: /path?somequery#somehashfragment 时,它将重定向到身份验证提供程序的登录页面,然后重定向回 /path?somequery ,但是哈希片段被剥离。

2 个答案:

答案 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>

希望这会有所帮助!