oidc-client登录后重定向
Posted
技术标签:
【中文标题】oidc-client登录后重定向【英文标题】:Redirect after oidc-client login 【发布时间】:2018-05-20 12:46:07 【问题描述】:我有一个运行 angular 2 的 asp.net 核心应用程序。我正在使用 oidc-client.js 库来处理登录。目前,如果用户已经登录并点击该站点的链接,则身份验证会正确进行,并且用户会被带到正确的页面。但是,如果他们没有登录,则可以很好地退回到登录页面,并使用正确的 url 被带回站点,但最终会被带到 /auth-callback 页面。此时,重定向 url 会丢失,并且在 auth-callback 之后会在站点的默认路由处结束。
我正在寻找的是 oidc-client 库中是否有任何选项可用于在 auth-callback 调用后保留正确的 url?翻阅文档和示例,我没有任何反应。还是我必须自己整理一些东西?
【问题讨论】:
【参考方案1】:在您的客户端代码中,当您调用 signinRedirect
时,您可能会滥用 state 属性,以便稍后使用(这不是它的用途),例如 new Oidc.UserManager().signinRedirect(state:window.location.href);
。
然后在你的回调页面中就可以使用了:
mgr
.signinRedirectCallback()
.then(function (user)
window.history.replaceState(, window.document.title, window.location.origin + window.location.pathname);
window.location = user.state || "/";
);
【讨论】:
【参考方案2】:您必须在资产中创建一个单独的 html 页面来处理获取令牌并在登录重定向后存储它们
-
在您的 openID 提供商上登录成功
重定向到您的 html 静态页面
例如,您的页面将获取令牌并将其存储在 localStorage 中
令牌准备就绪后,您的静态 html 页面将重定向到您的 Angular 应用根目录
您可以在 /assets 文件夹中创建 redirect_page.html
<script src="https://cdnjs.cloudflare.com/ajax/libs/oidc-client/1.4.1/oidc-client.min.js"></script>
<script>
var config =
userStore: new Oidc.WebStorageStateStore( store: window.localStorage )
;
var mgr = new Oidc.UserManager(config);
mgr.signinRedirectCallback().then(() =>
window.history.replaceState(,
window.document.title,
window.location.origin);
window.location = "/";
, error =>
console.error(error);
);
</script>
并设置你的 userManager 配置
var config =
...
redirect_uri: `$clientRoot/assets/redirect_page.html`,
【讨论】:
以上是关于oidc-client登录后重定向的主要内容,如果未能解决你的问题,请参考以下文章